【问题标题】:What is the benefit of prepending async to a function that returns a promise?将异步添加到返回承诺的函数有什么好处?
【发布时间】:2017-12-19 05:18:42
【问题描述】:

在这里添加异步有什么好处?

async function asyncFunc () {
   return new Promise (function (resolve, reject) {

   });
}

【问题讨论】:

  • Promise/asyncFunc 是否包含异步请求,否则真的不需要为您的函数使用 async 关键字
  • 绝对没有。
  • @Bergi - 我喜欢它返回承诺的快速可视化。如果您在 IDE 中折叠所有函数,那就太好了,因为您想扫描可用的“公共”方法。
  • @VtoCorleone 我认为您应该能够从函数/方法名称以及您对应用程序中有意义的知识的了解中推断出这一点。否则,无论如何您都需要使用类型签名(例如 Flow 或 TypeScript)。
  • @VtoCorleone 我不是指方法名称中的前缀/后缀,而只是领域知识。例如 Math.max 返回一个数字,ajaxreadConfig 返回一个承诺(对于,呃,某事)。是的,async 关键字 一个快速的视觉提醒,该函数返回一个承诺,但出于 API 概述的目的,我更喜欢完整的类型签名。

标签: javascript async-await


【解决方案1】:

async 的唯一好处是作为函数将(始终)返回承诺的视觉标记,您甚至不必扫描函数体以查找 return 语句。如果您有一行 async functions,这可能有助于保持一致性。

除此之外:它的好处绝对为零。这与将返回值包装在额外的 Promise.resolve() 调用中一样好。如果您的函数体仅包含带有承诺的 return 语句(new Promise 或其他函数调用),我建议不要使用 async

一般来说,如果你的函数体不包含await 表达式,你可能也不需要async 关键字。规则的例外是当您想要确保函数 always 返回一个 Promise 时,即使代码中引发了一个应该导致 Promise 拒绝的异常。

【讨论】:

    【解决方案2】:

    我认为在这里使用async 没有任何好处,除非您在promise 函数中使用await

    async function asyncFunc () {
       // no await here
    }
    

    async/await是连用的,没有其他的没有意义。

    【讨论】:

    • 你指的是什么“promise函数”?
    • 如果 await 在 Promise 执行器中使用,那么将 async 添加到 asyncFunc 将无济于事 - 仅当您想直接在 asyncFunc 中使用 await 时才为 @987654332 @必填
    • 可能是术语不清楚。修改我的答案。
    • @VipinKumar 即使在 Promise 回调中存在 await,回调本身也必须在语法上标记为异步,而不是 asyncFunc,这没有任何意义。
    • 我猜,现在我已经修改了有意义的答案
    猜你喜欢
    • 2016-10-02
    • 2022-01-26
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 2021-01-02
    • 2021-07-16
    相关资源
    最近更新 更多