我一直在使用$ q.all来异步运行一个promise数组。在数组的一个元素中,我想级联promise,以便在跳转到outest then函数之前完成整个函数。代码如下所示:
$q.all([
function1().then(function () { }, function (reason) { addToErrorList($scope, reason) }),
function2().then(function () { }, function (reason) { addToErrorList($scope, reason) }),
function3().then(function () { }, function (reason) { addToErrorList($scope, reason) }),
function4().then(function () { }, function (reason) { addToErrorList($scope, reason) }),
function5($q).then(
function() {
$q.all([
function51($q).then(function () { }, function (reason) { addToErrorList($scope, reason) }),
function52($q).then(function () {
someLogic();
}, function (reason) { addToErrorList($scope, reason); }),
])})
]).then(function () {
usSpinnerService.stop('spinner');
if ($scope.errorList.length > 0) {
showMessages($scope, $scope.errorList, "error");
}
});
似乎代码执行“usSpinnerService.stop('spinner');”在它实际运行到function51和function52之前。我想知道有没有让外部$ q.all执行所有功能?感谢。
我还发现每个前四个函数中的addToErrorList($ scope,reason)都是异步运行的。有没有让它同步运行然后执行outest然后函数?
更正:以上段落不正确。我检查了addToErrorList,然后在外部然后执行函数之前运行。
答案 0 :(得分:2)
您需要在此处返回$q.all
:
function() {
return $q.all([
function51($q).then(function () { }, function (reason) { addToErrorList($scope, reason) }),
function52($q).then(function () {
someLogic($http, $scope, $q, sharedService);
}, function (reason) { addToErrorList($scope, reason); }),
])})