我的javaScript代码中的语法错误是什么?
我有一个javascript函数,它调用一个异步函数并将结果存储在一个数组中。我在函数的第8行得到一个语法错误。错误:“未捕获的语法错误:缺少)在参数列表之后”。我在函数中没有看到任何括号问题。有人能指出他们是否发现了任何错误吗我的javaScript代码中的语法错误是什么?,javascript,function,foreach,async-await,Javascript,Function,Foreach,Async Await,我有一个javascript函数,它调用一个异步函数并将结果存储在一个数组中。我在函数的第8行得到一个语法错误。错误:“未捕获的语法错误:缺少)在参数列表之后”。我在函数中没有看到任何括号问题。有人能指出他们是否发现了任何错误吗 async function ProcessWorkItem(workItems) { var tempData = []; workItems.relations.forEach(function(relation){
async function ProcessWorkItem(workItems) {
var tempData = [];
workItems.relations.forEach(function(relation){
if (relation.rel.includes("Forward")) {
//console.log(i);
var split = relation.url.split("/");
var childId = split[split.length-1];
tempData.push(await getChildWorkItem(childId));
}
});
console.log(tempData);
return Promise.all(tempData)
}
等待
只能在异步函数中使用。
forEach
中的内部函数应该是异步的。或者您可以完全删除async
/wait
,只需向阵列传递承诺:
函数进程工作项(工作项){
var tempData=workItems.relations.map(函数(关系){
if(关系相关包括(“远期”)){
//控制台日志(i);
var split=relation.url.split(“/”);
var childId=split[split.length-1];
返回getChildWorkItem(childId);
}
});
console.log(tempData);
返回承诺。全部(tempData)
}
您不能在非异步函数中使用wait
包含wait的函数(forEach回调函数)不是异步函数
这是更新后的函数
异步函数进程工作项(工作项){
var tempData=[];
var关系=工作项关系;
var relationNum=relations.length;
对于(var i=0;i
那不行。forEach
循环将触发异步函数,然后返回承诺。所有(tempData)
将在任何异步函数解析之前运行,并将任何数据放入tempData
@Quentin,感谢您指出问题。我可能已经修好了。我不知道你为什么要在这里创造一个额外的承诺。不需要async
或wait
Hmm。实际上,如果getChildWorkItem
返回promise,它可以直接传递给数组和promise.all
。已删除内部async
/wait
@ZankhanaRana-如果您需要以串行方式而不是并行方式运行它们(注意,您似乎没有在代码中将数据从一个循环传递到下一个循环),那么您需要为循环使用常规的,而不是forEach
或映射
。这是行不通的。forEach
循环将触发异步函数,但它不会等待它们解析后再继续下一行(这需要填充tempData
)。是的,我错过了。我正在努力让你知道。但是,那么错误不就是不能在异步函数中等待吗?为什么我会看到丢失的“')”语法错误?我稍微修改了代码。我在foreach函数中添加了async关键字。我没有使用tempData,而是更新了一个全局变量。这似乎解决了语法错误。但我不确定它是否返回了正确的输出。我在查that@ZankhanaRana-等待是第一个参数。在第一个参数之后,您需要一个,
(然后是下一个参数)或)
(以结束参数)。你不应该接受这个。这不能解决你的问题。这会让事情变得更糟。@ZankhanaRana-阅读关于Nina Lisitsinskaya答案的评论线索可能会有所帮助(请注意,他们在我发表第一条评论后对其进行了修复,并在第二条评论后对其进行了改进)