【问题标题】:Babel-node script failed with 'Unexpected token' syntaxError on 'await' lineBabel-node 脚本在 'await' 行失败,出现 'Unexpected token' syntaxError
【发布时间】:2016-11-11 07:09:30
【问题描述】:

我有一个从 Firebase 读取大量信息的脚本,then 处理它。这涉及对外部数据源的一些异步调用,我想使用async 和await。我已经在这个 npm 项目中成功地做到了这一点,所以我不明白为什么它现在不起作用。这是我的 .babelrc 文件:

{
  "presets": ["es2015", "stage-0", "react"],
  "plugins": ["syntax-async-functions","transform-regenerator"]
}

这是我的代码的要点:

var config = {
    apiKey: "key",
    authDomain: "myProject.firebaseapp.com",
    databaseURL: "https://myProject.firebaseio.com",
    storageBucket: "myProject.appspot.com",
    messagingSenderId: "id"
};
Firebase.initializeApp(config);

var dbRef = Firebase.database().ref();

getAllFirebaseDocs(dbRef);

async function getAllFirebaseDocs(dbRef) {
	return dbRef.once('value').then(function(snapshot) {
		var items = snapshot.val();
        for (key in items) {
            var priceUrl = "some.url.com"
		    items[key] = await requestPrices(items[key], priceUrl);
        }
    }
}
		

在await 行与SyntaxError: testScript.js: Unexpected token 上失败。还有一堆奇怪的方框字符和 33m 和 39m 的代码,像这样:[33m][39m[1m,[22m priceUrl[94m[1m)[22m[39m[1m;[22m。

我正在使用babel-node testScript.js 运行脚本。我知道这行得通,因为我有另一个脚本在与babel-node 的同一个项目中运行,并且它的异步部分可以正常工作......不确定我在这个项目中错过了什么。如果重要,babel-node -V 会提供 v6.4.0。

【问题讨论】:

    标签: javascript node.js asynchronous async-await babeljs


    【解决方案1】:

    您只能在标记为async 的函数中使用await。在您的情况下,您在未标记为这样的函数(.then() 的回调)中运行它。

    你可以用这个:

    return dbRef.once('value').then(async function(snapshot) { ... });
    

    但由于您已经在使用async/await,您不妨将代码重写为:

    async function getAllFirebaseDocs(dbRef) {
      let snapshot = await dbRef.once('value');
      let items    = snapshot.val();
      for (let key in items) {
        let priceUrl = "some.url.com"
        items[key] = await requestPrices(items[key], priceUrl);
      }
      // I assume that you want to return `items`; your original code doesn't return anything.
      return items;
    }
    

    【讨论】:

    • 在这两种情况下(内联异步和重新排列的异步),它都会给我一个新错误:You gave us a visitor for the node type "ForAwaitStatement" but it's not a valid type。没有给我发生这种情况的行号。
    • 啊,我解决了;将我的 babel-core 升级到 6.18.2 并从我的 .babelrc 文件中删除了“stage-0”。现在我的脚本可以工作了,谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2016-02-12
    • 2016-09-30
    • 2017-11-28
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    相关资源
    最近更新 更多