Rob*_*bok 6 javascript asynchronous promise es6-promise
我们知道async函数隐式返回 Promise。但我有一个纯粹迂腐的问题。async如果我显式返回 Promise,我应该添加关键字吗?
这是:
const wait = async ms => new Promise(
resolve => setTimeout(resolve, ms)
);
Run Code Online (Sandbox Code Playgroud)
和这个有什么不同吗?
const wait = ms => new Promise(
resolve => setTimeout(resolve, ms)
);
Run Code Online (Sandbox Code Playgroud)
我相信从技术上来说它们是相同的。这两种方法背后是否有任何风格指南或官方推荐来定义此类功能?
jfr*_*d00 12
我认为使用async函数有四个主要原因:
await.async可以让查看代码的调用者清楚地知道该函数始终返回一个承诺 - 本质上是自记录的。因此,如果您没有使用await并且不需要第 2 点,并且您已经手动返回了一个 Promise,那么实际上不需要将该函数声明为async.
对以上几点还有一些想法。
第 1 点要求async您是否要使用await. 没有其他办法解决这个问题。
第 2 点和第 3 点实际上只是为了编程方便。如果您捕获自己的同步异常或确定不存在同步异常并且您正在控制所有代码路径以返回承诺,则async没有必要。
如果您的代码同时具有同步代码路径和异步代码路径,则可能会出现#2 和 #3 点,例如检查缓存并返回一个值(如果该值存在于缓存中),如果不存在于缓存中,则创建一个网络请求获取值。如上所述,可以在不使用 的情况下手动编码async,但使用 时代码有时会更简单一些,async因为它会自动捕获同步异常并自动将返回值包装在 Promise 中。
第 4 点只是编码风格偏好。如果您喜欢创建函数的“自记录”方面async,您可以这样做,以表明它始终返回一个承诺。
async而且,对于任何对函数内部如何工作以及多年来优化的大量技术细节感兴趣的人,这是一篇关于该主题的相当深入的文章:关于快速异步的 V8 博客。
| 归档时间: |
|
| 查看次数: |
1805 次 |
| 最近记录: |