これは質問17757654に似ていますが、連鎖はありません。
背景:
私は、キーを押すたびに JSON を返す非常におしゃべりな API を持っていますが、これらの要求が間違った順序で返されることがあります (非常に速くキーを押すと)。promise の連鎖は合理的な解決策のように思えますが、連鎖せずにこれを解決する良い方法があるかどうか疑問に思っていましたか? (そして、リクエスト/メッセージに関する詳細を知らずに)
ここでタイムアウトを使用した例を書きました: http://jsfiddle.net/zakGh/
以下、
var myModule = angular.module('myModule', []);
myModule.factory('HelloWorld', function ($q, $timeout) {
var getSlowFirstMessage = function () {
var deferred = $q.defer();
$timeout(function () {
deferred.resolve('Slow First Message');
}, 2000);
return deferred.promise;
};
var getFastSecondMessage = function () {
var deferred = $q.defer();
$timeout(function () {
deferred.resolve('Fast Second Message');
}, 1000);
return deferred.promise;
};
return {
getSlowFirstMessage: getSlowFirstMessage,
getFastSecondMessage: getFastSecondMessage
};
});
myModule.controller('HelloCtrl', function ($scope, HelloWorld) {
$scope.messages = [];
HelloWorld.getSlowFirstMessage().then(function (message) {
$scope.messages.push(message);
});
HelloWorld.getFastSecondMessage().then(function (message) {
$scope.messages.push(message);
});
});
<body ng-app="myModule" ng-controller="HelloCtrl">
<h1>Messages</h1>
<ul>
<li ng-repeat="message in messages">{{message}}</li>
</ul>
</body>