您在Promise 构造函数 executor 函数中有效地使用了Promise,因此这是Promise 构造函数反模式。
您的代码是主要风险的一个很好的例子:没有安全地传播所有错误。阅读为什么在那里。
此外,使用async/await可以使相同的陷阱更加令人惊讶。相比:
let p = new Promise(resolve => {
  ""(); // TypeError
  resolve();
});
(async () => {
  await p;
})().catch(e => console.log("Caught: " + e)); // Catches it.
 
 
有一个天真的(错误)async等价物:
let p = new Promise(async resolve => {
  ""(); // TypeError
  resolve();
});
(async () => {
  await p;
})().catch(e => console.log("Caught: " + e)); // Doesn't catch it!
 
 
在浏览器的 Web 控制台中查看最后一个。
第一个有效,因为Promise 构造函数 executor 函数中的任何直接异常都方便地拒绝了新构造的 Promise(但在任何.then你自己的内部)。
第二个不起作用,因为async函数中的任何直接异常都会拒绝函数本身返回async的隐式Promise。
由于 promise 构造函数执行器函数的返回值未使用,这是个坏消息!
你的代码
没有理由你不能定义myFunction为async:
async function myFunction() {
  let array = await getAsyncArray();
  return new Promise((resolve, reject) => {
    eachLimit(array, 500, (item, callback) => {
      // do other things that use native promises.
    }, error => {
      if (error) return reject(error);
      // resolve here passing the next value.
    });
  });
}
但是为什么要使用过时的并发控制库await呢?