ES2017 Async/await 函数 - 它们只适用于 promises 吗?

ES2017 Async/await functions - do they work only with promises?

我开始在我的 js 应用程序(由 Babel 转译)中使用 async/await ES7 函数。

如有错误请指正,但它们只适用于 Promises 吗?如果是,这意味着我需要将常规回调函数包装到 Promises 中(顺便说一句,我目前正在做的事情)。

是的,你await一个承诺。

async function myFunction() {
  let result = await somethingThatReturnsAPromise();
  console.log(result); // cool, we have a result
}

http://pouchdb.com/2015/03/05/taming-the-async-beast-with-es7.html

当前的(可能是最终的)async/await 提案等待承诺并脱糖成类似 bluebird 的 Promise.coroutine 的东西,await 扮演 yield 的角色。

这是有道理的,因为承诺代表价值 + 时间,而您正在等待该价值可用。注意 await 也等待像 C# 或 Python (3.5+) 等所有其他语言中的类似构造的承诺。

请注意,将回调 API 转换为 promise 非常容易,一些库提供了在单个命令中执行此操作的工具。有关详细信息,请参阅 How to convert an existing callback API to promises