Функции ES2017 Async / await - они работают только с обещаниями?

Я начал использовать async/await функции ES7 в моих приложениях js (транспилированные Babel).

исправьте меня, если неправильно, но работают ли они только с обещаниями? Если да, это означает, что мне нужно обернуть регулярные функции обратного вызова в обещания (что я сейчас делаю кстати).

2 ответов


текущее (и, вероятно, окончательное) асинхронное/ожидающее предложение ждет обещаний и десугаров во что-то вроде bluebird's Promise.coroutine с await роль yield.

это имеет смысл, поскольку обещания представляют собой значение + время, и вы ждете, когда это значение станет доступным. Примечание await также ожидает promise как конструкции во всех других языках, которые включают его, как C# или Python (3.5+) .

обратите внимание, что преобразование API обратного вызова в обещания очень легко, и некоторые библиотеки предлагают инструменты для этого в одной команде. См.как преобразовать существующий API обратного вызова в 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