Javascript 承诺链和所有

Javascript 承诺链和所有,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,我构建了这个我不理解的用例 我想创建一个承诺数组(示例中为vararray),并添加解析数组中每个元素的所有承诺。 或者,对于数组的某些元素,我希望进行额外的细化,以便链接另一个Promise(在if(e=='b')内部) 我希望Promise.all(数组)将捕获拒绝条件,但它会打印: > node .\test.js b is ok all clear (node:1304) UnhandledPromiseRejectionWarning: Unhandled promise rej

我构建了这个我不理解的用例

我想创建一个承诺数组(示例中为var
array
),并添加解析数组中每个元素的所有承诺。 或者,对于数组的某些元素,我希望进行额外的细化,以便链接另一个
Promise
(在
if(e=='b')
内部)

我希望
Promise.all(数组)
将捕获拒绝条件,但它会打印:

> node .\test.js
b is ok
all clear
(node:1304) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: 'b is ok' is NOT ok
为什么会这样?
承诺。所有的
都不管理链接

promise
指向一个承诺,另一个承诺链接在一起。我认为,所有的代码>允诺< /代码>链都需要进行评估,以解决它,而不仅仅是第一个。我错过什么了吗

我注意到,实际的解决办法是重新分配承诺,如下所示:

thePromise = thePromise.then((msg) => ....
示例代码:

const array = [];
const arrayData = ['a', 'b', 'c'];

arrayData.forEach((e) => {
  let thePromise = newPromise(e);

  if (e === 'b') {
    thePromise.then((msg) => {
      console.log(msg);
      return newPromise(msg);
    });
  }

  array.push(thePromise);
});

Promise.all(array)
  .then(() => console.log('all clear'))
  .catch(err => console.log('something goes wrong', err));


function newPromise(value) {
  return new Promise((resolve, reject) => {
    if (value === 'b is ok') {
      reject(new Error(`'${value}' is NOT ok`));
    } else {
      resolve(`${value} is ok`);
    }
  });
}
谢谢你的解释

承诺。所有的
都不管理链接

是的。它管理了
数组中的所有承诺,这些承诺都实现了,这就是它记录
全部清除的原因

承诺。所有人都不知道-不可能知道-关于你用
Promise创建的新承诺。然后(…)
。它不在链条中,它在分支。当它被拒绝时,没有任何东西可以处理错误。

分支这个词让我明白了一切!