Javascript Babel节点脚本失败,错误为';意外标记';syntaxError on';等待&x27;线
我有一个从Firebase读取大量信息的脚本,Javascript Babel节点脚本失败,错误为';意外标记';syntaxError on';等待&x27;线,javascript,node.js,asynchronous,async-await,babeljs,Javascript,Node.js,Asynchronous,Async Await,Babeljs,我有一个从Firebase读取大量信息的脚本,然后处理它。这涉及到对外部数据源的一些异步调用,我想使用async和await。我已经在这个npm项目中成功地完成了这项工作,所以我不明白为什么它现在不起作用。这是我的.babelrc文件: { “预设”:[“es2015”、“第0阶段”、“反应”], “插件”:[“语法异步函数”,“转换再生器”] }您只能在标记为async的函数中使用wait。在您的例子中,您正在一个未标记为的函数(对.then()的回调)中运行它 您可以使用以下选项: ret
然后处理它。这涉及到对外部数据源的一些异步调用,我想使用async
和await
。我已经在这个npm项目中成功地完成了这项工作,所以我不明白为什么它现在不起作用。这是我的.babelrc文件:
{
“预设”:[“es2015”、“第0阶段”、“反应”],
“插件”:[“语法异步函数”,“转换再生器”]
}
您只能在标记为async
的函数中使用wait
。在您的例子中,您正在一个未标记为的函数(对.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;
}
只能在标记为async
的函数中使用wait
。在您的例子中,您正在一个未标记为的函数(对.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;
}
在这两种情况下(内联异步和重新排列的异步),它都给了我一个新的错误:您为我们提供了节点类型“ForAwaitStatement”的访问者,但它不是有效的类型
。没有告诉我发生这种情况的行号。啊,我解决了它;将我的babel core升级到6.18.2,并从我的.babelrc文件中删除了“stage-0”。现在我的脚本可以工作了,谢谢:)在这两种情况下(内联异步和重新排列异步),它都给了我一个新的错误:您给我们提供了节点类型“ForAwaitStatement”的访问者,但它不是有效的类型
。没有告诉我发生这种情况的行号。啊,我解决了它;将我的babel core升级到6.18.2,并从我的.babelrc文件中删除了“stage-0”。现在我的脚本可以工作了,谢谢:)