Я не могу для жизни меня выяснить, как преобразовать код, используя await
действительного es5. Я использую webpack 3 и могу успешно преобразовывать функции async
в функции, возвращающие обещания, но его ошибка при await
: Module build failed: SyntaxError:...: await is a reserved word
. Я предположил, что мне нужен специальный плагин для babel-loader
, но я не вижу его в await
. Здесь соответствующая часть моей конфигурации webpack:
module: {
rules: [{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['es2015', 'stage-0'],
plugins: ["syntax-async-functions","transform-regenerator"],
}
}
}
]
}
Это то, что я пытаюсь сделать возможным?
ОБНОВИТЬ:
Здесь соответствующая часть моей настройки webpack теперь:
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: [{
loader: 'nodent-loader',
options: {
promises: true,
wrapAwait: true
}
},
{
loader: 'babel-loader',
options: {
presets: ['es2015', 'stage-0'],
plugins: ["syntax-async-functions","transform-regenerator"],
}
}
]
}
]
}
И вот код, который я пытаюсь скомпилировать:
module.exports = async function() {
var x = await wait()
}
async function wait() {
return new Promise(function(resolve) {
setTimeout(function() {
resolve()
},1000)
})
}
На самом деле у вас async
объявлено о неправильной функции.
ваша функция wait
не является асинхронной. Вы называете это, и он немедленно возвращает обещание.
вам нужно добавить async
в this.init
, который является асинхронной функцией. Он не возвращается сразу, потому что он должен await
обещания решить.
См. Документы для справки: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
await wait()
.
await asyncFunction();
Плагины, которые я использую, не поддерживают конвертацию ожидают в es5.