努力讓承諾在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
編輯:把快捷功能的服務,以便有一個與吊裝等不會產生混淆 - 仍然是同樣的結果 - 爵士小提琴更新
它似乎setTimout稍後執行http://jsfiddle.net/q4vofnz8/18/ – sbaaaang 2015-01-09 20:15:50
這裏使用事件的例子http://jsfiddle.net/q4vofnz8/21/ – sbaaaang 2015-01-09 20:24:06