For循环执行中断?循环后代码无法运行的问题求助
问题:循环执行后代码终止,后续语句无法运行
我的代码里在if语句中嵌套了一个for循环:
if(createRequest.data.status == "COMPLETE"){ for(let f = 0; f <= createRequest.data.results.length; f++){ testHubInfo.push(createRequest.data.results[f].id) associationArray.push({ "from": { "id": `${createRequest.data.results[f].id}` }, "to": { "id": `${eventID}` } }) } testHubInfo.push("Ugh") testHubInfo.push(associationArray) }
问题是代码运行到for循环时,能向testHubInfo和associationArray数组添加内容,但循环结束后函数就终止执行,后续的testHubInfo.push("Ugh")等操作都不运行,甚至if语句外的代码:
testHubInfo.push("Got here to assoc?") await batchCreateAssociations(associationArray, eventID) context.log("SUCCESS") context.log("==============") return true;
也无法执行,求解决办法。
解决方案
问题出在for循环的终止条件上:
你写的是f <= createRequest.data.results.length,但数组的索引从0开始,createRequest.data.results的最后一个元素索引是results.length - 1。当f等于results.length时,createRequest.data.results[f]会是undefined,此时访问它的.id属性会直接抛出TypeError,导致代码中断执行,后续所有语句都不会运行。
修改循环条件为f < createRequest.data.results.length即可解决:
if(createRequest.data.status == "COMPLETE"){ // 把 <= 改成 < for(let f = 0; f < createRequest.data.results.length; f++){ testHubInfo.push(createRequest.data.results[f].id) associationArray.push({ "from": { "id": `${createRequest.data.results[f].id}` }, "to": { "id": `${eventID}` } }) } testHubInfo.push("Ugh") testHubInfo.push(associationArray) }
修改后,循环只会遍历数组的有效索引,不会访问到不存在的元素,代码就能正常执行到后续的语句了。
内容的提问来源于stack exchange,提问作者sylargaf
相关产品推荐
相关产品推荐

