Promise.All函数调用问题

时间:2017-12-11 07:42:16

标签: javascript promise

我正在使用Promise.all函数同时解析多个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);
  }) 
}

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

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

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

注意 - 需要在数组中存储promises函数。就像我在做var arr。

2 个答案:

答案 0 :(得分:1)

这应该这样做,不要创建一个promises数组而是一个函数数组,然后将函数映射到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))

答案 1 :(得分:-1)

你也可以这样做 -

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