【问题标题】:Is a function that returns a promise always an async function?返回承诺的函数总是异步函数吗?
【发布时间】:2020-01-11 12:24:46
【问题描述】:

如果这三个是正确的,我很困惑。

A(){
Return promise
}
Async A(){
Return promise
}
Async A(){
Return await promise //this seems very wrong but still...
}

以下哪些是正确的 JavaScript?如果不止一个是正确的,那么这里的最佳做法是什么?

【问题讨论】:

    标签: javascript typescript promise async-await angular-promise


    【解决方案1】:

    Async/await 可以看作是 Promises 的语法糖。任何返回Promise 对象的函数都可以用作async 函数。这两种风格(promise 风格与 async/await 风格)可以毫无问题地混合使用。

    function A() {
      return Promise.resolve('foo');
    }
    
    async function B() {
      var aResult = await A();
    
      return aResult;
    }
    
    B().then(console.log);
    

    最佳做法是选择一种风格并坚持下去,以提高可读性。 Async/await 是较新的样式,它的优点是它避免了.then pyramid of doom

    请注意,并非所有运行时都支持 async/await 甚至 Promise,并且可能需要转译器(如 babel)。

    【讨论】:

      【解决方案2】:

      可以使用所有这些,因为这三个都是有效的。但鉴于你的例子,只有第一个是有意义的。

      您的每个示例都返回一个 Promise。您可以使用a().then(/*...*/)await a()(仅在async 函数内)在他们解决时得到他们的响应。阅读有关Promiseasync/await 的更多信息。


      function a() {
        return Promise.resolve();
      }
      

      这就是你应该如何编写一个返回 Promise 的函数。


      async function a() {
        return Promise.resolve();
      }
      

      这同样有效,但只有实际使用await 关键字的函数才需要使用async 进行注释。只返回 Promise 而不在其主体中使用 await 的函数不需要是 async


      Async A(){
      Return await promise //this seems very wrong but still...
      }
      

      这只是一个不必要的步骤。阅读更多 herehere

      【讨论】:

        猜你喜欢
        • 2022-01-26
        • 1970-01-01
        • 1970-01-01
        • 2021-01-11
        • 2018-12-22
        相关资源
        最近更新 更多