我正在尝试以特定方式使用 angularjs 异步实现 JavaScript 函数,如下图所示。
我试了几个选项都没有运气 http://jsfiddle.net/pb53cafy/4/
示例代码:
function PromiseCtrl($scope, $q, $timeout) {
//
var Afunction = function() {
var deferred = $q.defer();
$timeout(function() {
deferred.resolve("Success A");
}, 1000);
return deferred.promise;
};
var Bfunction = function() {
var deferred = $q.defer();
$timeout(function() {
deferred.resolve("Success B");
}, 2000);
return deferred.promise;
};
$scope.result = "Waiting";
$q.all([
Afunction(),
Bfunction()
]).then(function(value) {
$scope.result = value;
}, function(reason) {
$scope.result = reason;
});
//Remaining code ...
}
感谢您对此的帮助
编辑:修改了我正在寻找的代码 http://jsfiddle.net/pb53cafy/11/
最佳答案
您可以创建另一个函数来控制执行过程:
function execute() {
var deferred = $q.defer();
var bFinished;
var aPromise = Afunction().then(function(aRes) {
if(!bFinished) deferred.resolve(aRes);
return aRes;
}).catch(deferred.reject);
Bfunction().then(function(bRes) {
bFinished = true;
return aPromise.then(function(aRes) {
deferred.resolve(bRes + " and " + aRes);
});
});
return deferred.promise;
}
如果 A 先完成,它不会等待 B。
如果 B 先完成,它会等待 A 也完成。
关于javascript - Angular promise 执行顺序控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48263848/