在 Node JS 中循环获取操作
Looping through a fetch operation in Node JS
我正在尝试将 Json 个对象的集合写入数组,同时在 Node JS 中循环获取操作。我确定问题与异步操作有关,但无法弄清楚如何解决它。
这是我的代码:
for (const car of carFilter) {
const carJson = fetch(modelUrl + car, settings)
.then(res => res.json())
.then((json.data.trim));
carData.push(carJson);
}
console.log(carData);
我从 console.log 得到的是:
Promise { <pending> },
Promise { <pending> },... etc
我认为这意味着我正在尝试在数据被推入数组之前执行 console.log。我可能是错的。
提前致谢。
你可以这样做:
const promises = [];
for (const car of carFilter) {
const carJson = fetch(modelUrl + car, settings)
promises.push(carJson);
}
Promise.all(promises)
.then((values) => {
console.log(values); // will be in same order they are called
console.log(values[0]); // will be an Array
})
.catch( e => console.log(e));
所以,当我们调用一个异步操作时,它 returns 一个 Promise(在本例中)。我们将所有的承诺推送到一个数组中,可以使用“Promises.all”来帮助等待所有承诺并给出结果。
注意:如果您的任何承诺将被拒绝,您将无法获得后续承诺的解决或拒绝。
样本一在这里:
const promises = [];
for (let i = 0; i < 10; i++) {
const carJson = promiseCall(); //any promise call
promises.push(carJson);
}
Promise.all(promises)
.then((values) => {
console.log(values); // will be in same order they are called
})
.catch( e => console.log(e));
function promiseCall () {
return new Promise((res, rej) => {
setTimeout(()=> {
res(true);
} ,1000);
})
}
我正在尝试将 Json 个对象的集合写入数组,同时在 Node JS 中循环获取操作。我确定问题与异步操作有关,但无法弄清楚如何解决它。
这是我的代码:
for (const car of carFilter) {
const carJson = fetch(modelUrl + car, settings)
.then(res => res.json())
.then((json.data.trim));
carData.push(carJson);
}
console.log(carData);
我从 console.log 得到的是:
Promise { <pending> },
Promise { <pending> },... etc
我认为这意味着我正在尝试在数据被推入数组之前执行 console.log。我可能是错的。
提前致谢。
你可以这样做:
const promises = [];
for (const car of carFilter) {
const carJson = fetch(modelUrl + car, settings)
promises.push(carJson);
}
Promise.all(promises)
.then((values) => {
console.log(values); // will be in same order they are called
console.log(values[0]); // will be an Array
})
.catch( e => console.log(e));
所以,当我们调用一个异步操作时,它 returns 一个 Promise(在本例中)。我们将所有的承诺推送到一个数组中,可以使用“Promises.all”来帮助等待所有承诺并给出结果。
注意:如果您的任何承诺将被拒绝,您将无法获得后续承诺的解决或拒绝。
样本一在这里:
const promises = [];
for (let i = 0; i < 10; i++) {
const carJson = promiseCall(); //any promise call
promises.push(carJson);
}
Promise.all(promises)
.then((values) => {
console.log(values); // will be in same order they are called
})
.catch( e => console.log(e));
function promiseCall () {
return new Promise((res, rej) => {
setTimeout(()=> {
res(true);
} ,1000);
})
}