изо всех сил, чтобы получить обещания правильно работающих в angularjs поставщика услуг я читал docs, а также многочисленные примеры (here, here и here) и я думаю, что у меня есть мой синтаксис нормально (хотя явно что-то не так)angularjs отложено обещание не отложив
приложение модуль и контроллер выглядеть
var myApp = angular.module('myApp', []);
myApp.controller('Controller_1', ['$scope', 'Service_1', function($scope, Service_1) {
var myName = "Ben";
Service_1.slowService(myName)
.then(Service_1.fastService(name));
$scope.myName = myName;
}]);
услугу (с медленной функцией) выглядит следующим образом:
myApp.service('Service_1', function($q) {
this.slowService = function (name) {
var deferred = $q.defer();
console.log('Start of slowService:', name, Date.now());
setTimeout(function() {
console.log('setTimeout name:', name, Date.now());
if(name){
name = 'Hello, ' + name + " is learning Angularjs";
alert(name);
console.log('name:', name);
deferred.resolve(name);
} else {
deferred.reject('No name supplied !');
}
}, 3000);
return deferred.promise;
};
this.fastService = function(name){
console.log('Start of fastFunction:', name, Date.now());
alert('Hello ' + name + ' - you are quick!');
};
});
вывод консоли выглядит следующим образом:
Start of slowService: Ben 1420832940118
Start of fastFunction: result 1420832940122
setTimeout name: Ben 1420832948422
name: Hello, Ben is learning Angularjs
fastService
начинает перед slowService
Завершает, несмотря на использование отложенный объект/обещание в Service_1
.then
и в контроллере ...
Может ли кто-нибудь указать, что не так с кодом?
jsfiddle является here
EDIT: поставить быструю функцию в обслуживании, так что нет никакой путаницы с грузоподъемными и т.д. - все тот же результатом - JS скрипка обновленного
кажется setTimout выполнен позже http://jsfiddle.net/q4vofnz8/18/ – sbaaaang
здесь пример с использованием событий http://jsfiddle.net/q4vofnz8/21/ – sbaaaang