javascript - await 是保留字 - 从异步函数调用
问题描述
我正在使用 async-await:函数 run calls to findLateastVersion
, run 函数是 async 但我不断收到错误await is a reserved word
,findLateastVersion
返回 promise 并且根据不同的教程它应该可以工作..为什么这个错误仍然发生?
async function findLateastVersion(surveyName, db) {
return new Promise((resolve, reject) => {
try {
const refv = await db.collection('surveys').doc(surveyName).collection('versions').orderBy('timestamp'); //reference to specific version docs
console.log(refv);
let docName = refv.firebase.firestore.FieldPath.documentId();
resolve(docName);
// const versions = refv.where(firebase.firestore.FieldPath.documentId(), '!=').orderBy("timestamp").limit(1);
} catch (err) {
console.log('err: ', err);
}
reject("error")
});
}
async function run() {
const db = await connectToFirestore();
const surveyName = argv.s || argv.surveyName;
const surveyVersion = argv.v || argv.surveyVersion;
const names = ['a', 'b', 'c'];
if (!surveyName) {
names.forEach(function (surveyname) {
console.log("surveyname", surveyname)
const version = await findLateastVersion(surveyname, db)
//getSurveyData(surveyname, version, db);
});
}
//await getSurveyData(surveyName, surveyVersion, db);
}
解决方案
您只能使用await
标记为的内部函数async
。这是你的问题:
names.forEach(function (surveyname) {
console.log("surveyname", surveyname)
const version = await findLateastVersion(surveyname, db)
//getSurveyData(surveyname, version, db);
});
您应该简单地将异步添加到回调函数
names.forEach(async function (surveyname) {
console.log("surveyname", surveyname)
const version = await findLateastVersion(surveyname, db)
//getSurveyData(surveyname, version, db);
});
或者使用一些 asyncForEach 实现,类似于下一个:
async function asyncForEach(array: any[], callback: (value: any, index: number, array: any[]) => void) {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
}
await asyncForEach(names, async function (surveyname) {
console.log("surveyname", surveyname)
const version = await findLateastVersion(surveyname, db)
//getSurveyData(surveyname, version, db);
});
第二个变体允许您等待所有回调完成
推荐阅读
- pandas - 在 Pandas 数据框中更快地返回比较?
- vue.js - 如何导出 figma 文件并立即在 figma 桌面应用程序或浏览器新标签页中打开它?
- c# - 如何在 WPF DataGrid 中用透明的选择颜色勾勒出选定的行?
- c# - 替换字节数组中的 RGBA 值
- r - 在 R 中对具有特定条件的数据框进行子集化
- java - 如何从字符串中获取特定值并添加到其他值
- java - 每个令牌的 Spring OAuth2 访问令牌到期时间更新
- visual-studio - 带有错误 git 存储库的 Visual Studio 新项目
- flutter - 允许 Flutter 中的应用使用同一包的多个版本
- java - 如何处理 protobuf3 消息中可为空的枚举类型字段?