面对node JS中的舀取问题



此代码显示空对象({})


// declared at top

let mainData = {};
let trainStations = {};
let routes = {};
let trainNo = {};

data["data"].forEach(async (element) => {
const response2 = await fetch(
`https://india-rail.herokuapp.com/trains/getRoute?trainNo=${element["train_base"]["train_no"]}`
);
const data2 = await response2.json();
data2["data"].forEach((ele) => {
routes[ele["source_stn_code"]] = true;
});
trainNo[element["train_base"]["train_no"]] = routes;
});
console.log(trainNo);

如果我这样做,那么我将给出response with data

data["data"].forEach(async (element) => {
const response2 = await fetch(
`https://india-rail.herokuapp.com/trains/getRoute?trainNo=${element["train_base"]["train_no"]}`
);
const data2 = await response2.json();
data2["data"].forEach((ele) => {
routes[ele["source_stn_code"]] = true;
});
trainNo[element["train_base"]["train_no"]] = routes;
console.log(trainNo);
});

可能有一些挖掘问题,请帮助我解决这个问题:)

请参考此处并检查此

作为一个简短的说明,在forEach()循环中使用await会产生意想不到的结果。这是因为forEach()不会等到承诺解决(完成或拒绝)。

一个简单的解决方案是使用传统的for循环或for…of循环。

for(let element of data["data"]){
const response2 = await fetch(
`https://india-rail.herokuapp.com/trains/getRoute?trainNo=${element["train_base"]["train_no"]}`
);
const data2 = await response2.json();
data2["data"].forEach((ele) => {
routes[ele["source_stn_code"]] = true;
});
trainNo[element["train_base"]["train_no"]] = routes;
}
console.log(trainNo);

注意:请确保将上面的for..of循环包装在async函数中,因为只有当函数用async关键字定义时,才允许在函数中使用await关键字。

最新更新