首页 > web前端 > js教程 > 为什么在 Promise 构造函数中嵌套 `async/await` 是一种反模式?

为什么在 Promise 构造函数中嵌套 `async/await` 是一种反模式?

Mary-Kate Olsen
发布: 2024-12-16 13:49:12
原创
642 人浏览过

Why is Nesting `async/await` within Promise Constructors an Anti-Pattern?

Promise 构造函数中嵌套 async/await 的反模式

在本例中,使用 async.eachLimit 函数来管理并发操作的数量,就会出现一个困境。最初的诱惑是将代码构造如下:

function myFunction() {
  return new Promise(async (resolve, reject) => {
    eachLimit((await getAsyncArray), 500, (item, callback) => {
      // Operations using native promises
    }, (error) => {
      if (error) return reject(error);
      // Resolve with the next value
    });
  });
}
登录后复制

虽然将“myFunction”函数声明为异步似乎合乎逻辑,但这是不可行的,因为“eachLimit”函数的内部回调仍然存在无法访问。然而,这种方法存在一个重大缺陷:可能存在未处理的错误。

这种方法是反模式的教科书示例,涉及在另一个 Promise 的构造函数中使用 Promise。在这种情况下,未处理错误的风险尤其严重。为了避免这种情况,请考虑以下代码片段:

let p = new Promise(resolve => {
  ""(); // TypeError
  resolve();
});

(async () => {
  await p;
})().catch(e => console.log("Caught: " + e)); // Catches the error.
登录后复制

在这种情况下,虽然第一行抛出异常,但异步箭头函数的“catch”块会妥善处理该错误。正确的错误处理对于保持稳定性并防止代码库中出现意外行为至关重要。

以上是为什么在 Promise 构造函数中嵌套 `async/await` 是一种反模式?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板