【问题标题】:Promise.All function invocation issuePromise.All 函数调用问题
【发布时间】:2018-05-24 16:56:38
【问题描述】:

我正在使用 Promise.all 函数同时解决多个承诺。请参阅下面的代码 -

function check1() {
  console.log('check 1 invoked') 
  return new Promise((resolve, reject) => {
    setTimeout(()=> resolve('check1'), 4000);
  }) 
}

function check2() {
  console.log('check2 invoked')
  return new Promise((resolve, reject) => {
    setTimeout(()=> resolve('check2'), 4000);
  }) 
}

var arr = [check1(), check2()];

Promise.all(arr)
 .then((response) => console.log('response======>',response))
 .catch((error) => console.error('error',error))

上述方法的问题在于,当我创建 promise 数组时,会调用相应的函数。我想以两个函数仅从 promise.all 函数调用的方式更改上述代码。

注意 - 需要将 promise 函数存储在数组中。就像我在做 var arr 一样。

【问题讨论】:

  • arr = [ check1, check2 ]; Promise.all( arr.map( a => a() ).then ... ?
  • check1() 调用 check1 函数。那不是你想要的。你想要一个函数的reference,这样promise 可以稍后调用它。你可以通过简单地省略()来得到它。

标签: javascript promise


【解决方案1】:

这样就可以了,不要做一个promise数组而是一个functions数组,然后把functions映射到promises:

function check1() {
  console.log('check 1 invoked') 
  return new Promise((resolve, reject) => {
    setTimeout(()=> resolve('check1'), 4000);
  }) 
}

function check2() {
  console.log('check2 invoked')
  return new Promise((resolve, reject) => {
    setTimeout(()=> resolve('check2'), 4000);
  }) 
}
//do not store the promises, store the funciton that creates a promise
var arr = [check1, check2];

Promise.all(
  //map functions to promises
  arr.map(fn=>fn())
)
.then((response) => console.log('response======>',response))
.catch((error) => console.error('error',error))

【讨论】:

  • 感谢您的回答。
【解决方案2】:

你也可以这样做——

 var check1 = new Promise((resolve, reject) => { 
      setTimeout(()=> resolve('check1'), 4000);
    }); 
    var check2 = new Promise((resolve, reject) => { 
       setTimeout(()=> resolve('check2'), 4000);
    });
    Promise.all([check1, check2]).then(values => { 
      console.log(values);
    }, reason => {
      console.log(reason)
    });

【讨论】:

    猜你喜欢
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 2011-10-25
    • 2012-06-29
    • 1970-01-01
    相关资源
    最近更新 更多