一组承诺只有在传递给所有承诺后才开始执行吗?

时间:2017-09-21 15:44:13

标签: javascript typescript promise

如果构建了一个promises数组然后传递给Promise.all,那么执行会立即开始执行,还是仅在调用Promise.all时执行?

示例代码:

let promises: Promise<string> [] = [this.methodCall(), this.methodCall(), this.methodCall()];

 Promise.all(promises).then(values => {
  ...
 }).catch(error => {
  ...
 }); 

此外,这个代码示例是否会引起所有拒绝?

1 个答案:

答案 0 :(得分:2)

创建Promise时,它立即开始工作。查看日志。承诺身体功能起作用,然后在5秒后启动Promise.all

const pr = new Promise((resolve, reject) => {
  console.log('Started !!!');
  resolve();
});

console.log('Before setTimeout');

setTimeout( () => {
  Promise.all([pr]).then(result => console.log('Resolved !!!'));
}, 5000)

console.log('After setTimeout');

来自Documentation

  

使用参数resolve和reject传递的函数。该   执行函数由Promise立即执行   实现,传递解析和拒绝功能(执行者是   在Promise构造函数之前调用甚至返回创建的   对象)。