For循环顺序(带异步功能)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了For循环顺序(带异步功能)相关的知识,希望对你有一定的参考价值。
我有这个代码:
exports.formatDepArrTables = function(jsonReturn, type, placeName, callback) {
let toSend = "";
if (type == 'departure') {
for (let j = 0; j < jsonReturn.departures.length; j++) {
console.log("DEPARTURES LOOP j = " + j + "/" + jsonReturn.departures.length);
if(currentDeparture.display_informations.links[0] === undefined) {
toSend += ""; // setting some string informations
}
else {
let oceTrainId = ""; // random number given by a json
_this.getDisruptionFromDisruptionId(oceTrainId, function(data) {
for(let i = 0; i < data.disruptions[0].impacted_objects[0].impacted_stops.length; i++) {
if(currentImpactedStop.stop_point.label == placeName) {
toSend += "string";
}
}
});
}
}
console.log("End of the first loop");
return callback(toSend);
} else if (type == 'arrival') {
// copy&paste
} else {
throw new Error("not defined");
}
};
当我运行这个代码(我使用NodeJS)时,它从第一个循环得到1 / 10,2 / 10 ......但它没有在第一个循环的第一次迭代中迭代第二个循环(它显示“结束”第一个循环“并开始第二个循环”。
getDisruptionFromDisruptionId
是一个自定义方法,它在API上发出请求(带有'请求'NodeJS模块)。
当然,我需要有getDisruptionFromDisruptionId
给出的信息来运行我的下一个循环......
此代码部分的父函数返回一个需要在两个循环结束时“填充”的回调。
有任何想法吗 ?
答案
request
是异步函数,您需要在代码中添加async / await或使用递归
以上是关于For循环顺序(带异步功能)的主要内容,如果未能解决你的问题,请参考以下文章
使用 DispatchGroup、DispatchQueue 和 DispatchSemaphore 按顺序执行带有 for 循环的 Swift 4 异步调用