Babel-node脚本失败,出现了“意外令牌”。 syntaxError on' await'线

时间:2016-11-11 07:09:31

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

我有一个脚本,它从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);
        }
    }
}
		




awaitSyntaxError: 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。

1 个答案:

答案 0 :(得分:2)

您只能在标记为await的功能中使用async。在您的情况下,您在一个未标记为此类的函数(回调到.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;
}