gpt4 book ai didi

javascript - $q.all - 过早解决?

转载 作者:行者123 更新时间:2023-11-30 11:48:08 25 4
gpt4 key购买 nike

我有一个调用服务器的函数:

function doCalls(options) {
var deferred = $q.defer;
myService.doCallOne(options).then(function(response){
myService.doCallTwo().then(function() {
deferred.resolve();
});
});
return deferred.promise;
}

我有一组不同的选项,我想创建一组传递给 $q.all 的 promise ,所以我这样做:

var promiseArray = [];
_.each(optionArray, function(options) {
promiseArray.push(doCalls(options));
});

然后我尝试等待他们解决:

$q.all(promiseArray).then(function() {
doNextPart();
});

问题是,doNextPart() 似乎在我的任何 promise 解决之前就被调用了。我在这里做错了什么吗?

最佳答案

您忘记了调用 $q.defer,所以它实际上并没有创建一个延迟对象。您的 doCalls 函数调用返回了 undefined,您的 deferred.resolve() 调用抛出了异常(被 promise 吞没),并且 $q.all 立即用 undefined 数组实现。

您可以将代码更改为

var deferred = $q.defer();
// ^^

但实际上你应该避免 deferred antipattern !只需使用

function doCalls(options) {
return myService.doCallOne(options).then(function(response){
return myService.doCallTwo();
}).then(function(secondResponse) {
return undefined; // you might want to omit this
});
}

关于javascript - $q.all - 过早解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40246496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com