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);
}