Как использовать веб-пакет для преобразования ключевого слова await в es5?

1

Я не могу для жизни меня выяснить, как преобразовать код, используя 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)
    })
}
  • 0
    Я не вижу проблем с вашим конфигом. Как вы используете await, я думаю, что это не проблема, вы можете вставить код?
  • 0
    Я использую await правильно: await asyncFunction(); Плагины, которые я использую, не поддерживают конвертацию ожидают в es5.
Теги:
webpack

1 ответ

1
Лучший ответ

На самом деле у вас async объявлено о неправильной функции.

ваша функция wait не является асинхронной. Вы называете это, и он немедленно возвращает обещание.

вам нужно добавить async в this.init, который является асинхронной функцией. Он не возвращается сразу, потому что он должен await обещания решить.

См. Документы для справки: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

  • 0
    Хорошо, я вижу. Но, конечно, это не синтаксические ошибки, что я и получил. Это не прошло await wait() .
  • 1
    Я нашел это: babeljs.io/docs/plugins/transform-async-to-generator . должна быть версия вебпака? Очевидно, генераторы в es2015, поэтому он использует их вместо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню