Babel-node脚本失败'意外标记'syntaxError on '线

Babel-node script failed with 'Unexpected token' syntaxError on 'await' line

本文关键字:syntaxError on 脚本 Babel-node 意外 失败      更新时间:2023-09-26

我有一个脚本,从Firebase读取一堆信息,和then处理它。这涉及到对外部数据源的一些异步调用,为此我想使用asyncawait。在这个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);
        }
    }
}
		

SyntaxError: testScript.js: Unexpected tokenawait行失败。还有一堆代码,里面有奇怪的方框字符和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。

您只能在标记为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;
}