当谈到 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 错误的功能,并处理偶尔不使用 await
和 try/catch
返回 Promise 的函数。
async function myFunc() {
try {
await somePromise();
await anotherPromise();
} catch(e) {
log(e);
}
}
关于node.js - 自动解决后的 promise 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56190104/