gpt4 book ai didi

javascript - JS - 使用 $q.when() 按顺序运行 promise,最后我该如何添加?

转载 作者:行者123 更新时间:2023-11-30 20:57:31 26 4
gpt4 key购买 nike

我正在使用外部源生成对象,目的是处理它们的回调样式。不幸的是,这些回调可能超出浏览器的堆栈限制,我必须记住 IE 的最坏情况 500。

我已经使用 $q.when 重写了我的代码

   $scope.combinations.forEach(function(combination) {
chain = chain.then(function() {
return generateConfiguration(combination);
});
});

generateConfiguration 如果函数返回一个 promise 。一切正常,但我想做的是在链的末尾添加 finally()

到目前为止,我所做的是在 generateConfiguration 中设置一个跟踪器,该跟踪器识别最后的组合并触发本应由 finally 触发的内容。

有更简洁的方法吗?

最佳答案

这取决于你想做什么。

您正在创建一个 promise ,因此如果您想要一个单个 finally对于链,只需在 afterforEach 构建它的末尾添加它:

// ...your forEach here, then:
chain.finally(/*...*/);

如果你想要一个finally来自generateConfiguration每个 promise ,要么给自己一个包装函数来做到这一点,要么在 forEach 中进行回调。

$scope.combinations.forEach(function(combination) {
chain = chain.then(function() {
return generateConfiguration(combination).finally(/*...*/); // <==
});
});

旁注:通过 reduce 有一种更惯用的方式来构建该链:

var chain = $scope.combinations.reduce(function(chain, combination) {
return chain.then(function() {
return generateConfiguration(combination);
});
}, Promise.resolve());

添加最后一个 finally (上面的选项 #1):

var chain = $scope.combinations.reduce(function(chain, combination) {
return chain.then(function() {
return generateConfiguration(combination);
});
}, Promise.resolve())
.finally(function() {
// ...do stuff here...
});

关于javascript - JS - 使用 $q.when() 按顺序运行 promise,最后我该如何添加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47498465/

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