Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的javaScript代码中的语法错误是什么?_Javascript_Function_Foreach_Async Await - Fatal编程技术网

我的javaScript代码中的语法错误是什么?

我的javaScript代码中的语法错误是什么?,javascript,function,foreach,async-await,Javascript,Function,Foreach,Async Await,我有一个javascript函数,它调用一个异步函数并将结果存储在一个数组中。我在函数的第8行得到一个语法错误。错误:“未捕获的语法错误:缺少)在参数列表之后”。我在函数中没有看到任何括号问题。有人能指出他们是否发现了任何错误吗 async function ProcessWorkItem(workItems) { var tempData = []; workItems.relations.forEach(function(relation){

我有一个javascript函数,它调用一个异步函数并将结果存储在一个数组中。我在函数的第8行得到一个语法错误。错误:“未捕获的语法错误:缺少)在参数列表之后”。我在函数中没有看到任何括号问题。有人能指出他们是否发现了任何错误吗

    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答案的评论线索可能会有所帮助(请注意,他们在我发表第一条评论后对其进行了修复,并在第二条评论后对其进行了改进)