我使用以下可正常工作的代码,
var aa = createA(val, 1000);
var bb = createB(val2, 500);
Promise.all([aa, bb])
.spread(function(v1, v2) {
console.log("im Here")
}).catch(function() {
aa.cancel()
现在,当我需要在承诺中做一些我喜欢aa.cancel();
等的事情时,现在的问题是我需要改变它就像
跟随并让我们说我在内部循环并需要获取内部值,那么如何才能在catch 中执行取消?
Promise.all([createA(val, 1000), bb])
.spread(function(v1, v2) {
console.log("im Here")
}).catch(function() {
答案 0 :(得分:0)
在不知道“循环”的具体细节的情况下,我指的是我只能推测
如果你有一个简单的for循环,由于Promises的异步性质,这将无法按预期工作
要明确,不要这样做
for (i = 0; i < 1000; i ++) {
var aa = createA(val, 1000);
var bb = createB(val2, 500);
Promise.all([aa, bb])
.spread(function(v1, v2) {
console.log("im Here")
}).catch(function() {
aa.cancel()
});
}
你需要一个闭包 - 类似于IIFE(立即调用函数表达式)
for (i = 0; i < 1000; i ++) {
var aa = createA(val, 1000);
var bb = createB(val2, 500);
(function(a, b) {
Promise.all([a, b])
.spread(function(v1, v2) {
console.log("im Here")
}).catch(function() {
a.cancel()
});
}(aa, bb));
}
或简单地说,在循环外创建一个函数并调用它
function dothings(a, b) {
Promise.all([a, b])
.spread(function(v1, v2) {
console.log("im Here")
}).catch(function() {
a.cancel()
});
}
for (i = 0; i < 1000; i ++) {
var aa = createA(val, 1000);
var bb = createB(val2, 500);
dothings(aa, bb);
}
如果你展示一些你想要实现的更具体的例子,我可以编辑答案来定位具体细节,如果这没有帮助