node.js - 自动解决后的 promise 链接

标签 node.js promise

当谈到 NodeJS 的 Promise 时:哪种链式实现是更好的实践,为什么?

Promise.resolve()
      .then(() => somePromise())
      .then(() => anotherPromise())
      .catch(e => log(e));

对比

somePromise()
      .then(() => anotherPromise())
      .catch(e => log(e));

最佳答案

只要 somePromise() 始终返回一个 Promise 并且不同步抛出,就没有理由使用 Promise.resolve() 启动链。这只会创建不必要的额外代码来运行。您可以使用 somePromise() 启动链(如第二个示例中所示)。

但是,如果 somePromise() 可以同步抛出,并且您希望将其路由到 .catch() 处理程序中,那么您的第一个选择是实现此目的的一种方法。我认为,如果 somePromise() 可以同时返回 Promise 并同步抛出,那么它的设计很糟糕,但如果事实证明是这样,并且您无法修复您的代码,那么您的第一个选择将是解决该糟糕设计的一种方法。

<小时/>

此外,如果您的函数确实不接受自定义参数(尽管我意识到这可能只是伪代码),则您不需要额外的函数。你可以这样做:

somePromise()
    .then(anotherPromise)
    .catch(log);
<小时/>

另一种可能性是使用捕获同步异常和 Promise 错误的功能,并处理偶尔不使用 awaittry/catch 返回 Promise 的函数。

async function myFunc() {
    try {
        await somePromise();
        await anotherPromise();
    } catch(e) {
        log(e);
    }
}

关于node.js - 自动解决后的 promise 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56190104/

相关文章:

node.js - Mongoose 部分搜索

javascript - 收集在 forEach 的 promises 中生成的 promises

javascript - Promise then 和 catch 条款不起作用

javascript - AngularJS、Factory、$scope 和 Promise 之争

javascript - 等待 Promise 在 emitter.on 监听器函数中解析

Node.js - 无法永远运行 Node 服务器

node.js - 无法在 nuxt3 中获取动态导入的模块

javascript - 返回 promise 的函数未按预期工作

performance - 在express中使用nodejs可以采取哪些措施来提高jade模板渲染性能

javascript - 特定文档 ID 上的事件监听器,而不是整个数据库上的事件监听器