Javascript Promise.all get put函数作为带值的参数
我使用下面的代码工作正常Javascript Promise.all get put函数作为带值的参数,javascript,promise,bluebird,cancellation,Javascript,Promise,Bluebird,Cancellation,我使用下面的代码工作正常 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做一些承诺内的事情时,我可以像aa.cancel()等等,现在的问题是我需要将其更改为 下面
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做一些承诺内的事情时,我可以像aa.cancel()代码>等等,现在的问题是我需要将其更改为
下面让我们假设Im在循环中,需要在循环中获取值,那么如何在捕获中执行“立即取消”
Promise.all([createA(val, 1000), bb])
.spread(function(v1, v2) {
console.log("im Here")
}).catch(function() {
在不知道你提到的“循环”的细节的情况下,我只能推测
如果您有一个简单的for循环,由于承诺的异步性质,这将不会像预期的那样工作
说清楚,不要这样做
(i=0;i<1000;i++)的{
var aa=createA(val,1000);
var bb=createB(val2500);
承诺。所有([aa,bb])
.排列(功能(v1、v2){
console.log(“我在这里”)
}).catch(函数(){
aa.取消
});
}
您需要一个闭包—类似于IIFE(立即调用的函数表达式)
(i=0;i<1000;i++)的{
var aa=createA(val,1000);
var bb=createB(val2500);
(职能(a、b){
承诺。全部([a,b])
.排列(功能(v1、v2){
console.log(“我在这里”)
}).catch(函数(){
a、 取消
});
}(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);
}
函数点符号(a,b){
承诺。全部([a,b])
.排列(功能(v1、v2){
console.log(“我在这里”)
}).catch(函数(){
a、 取消
});
}
对于(i=0;i<1000;i++){
var aa=createA(val,1000);
var bb=createB(val2500);
dothings(aa,bb);
}
如果你展示了一些你想要实现的更具体的例子,如果没有帮助的话,我可以编辑答案来针对具体情况
你不能取消一个你没有证明人的承诺。就像不能对没有引用的对象调用方法一样,只需以相同的方式创建它,但要确保考虑循环和closure@JaromandaX-你能提供一个例子作为答案吗?@MadaraUchiha-但假设我需要将参数传递给这个承诺(我之前已经传播了它提供的价值,在我承诺了所有…,我应该如何克服这一点?最重要的是,你不能取消已经解决的承诺。顺便说一句,你也错过了:用a
替换a
内部dothings
:)是的,我最初在生活中有aa,bb和dothings作为参数名,但为了更清楚起见,改成了a,b,却忘了全部改成:p
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);
}