如何解决在for循环中使用fetch的“正确方法”是什么
如果要获取它,我很难理解我的for循环需要去哪里。我的代码取决于所有承诺均已解决以及JSON数据已保存到testarray
我进行了各种各样的尝试,但是它们不能解决我的问题。一种是for循环调用其中包含promise的函数。
function getData() {
return new Promise(function (resolve,reject) {
fetch(url[i])
.then((resp) => resp.json())
.then(function (data) {
buffer = data;
resolve();
});
});
}
for (i = 0; i <2; i++){
getData().then(function(){
testarray.push(buffer);
//do stuff with testarray
})
}
但是这不起作用,因为除非在for循环块中,否则我无法使用在testarray
上推送的数据。
如果我在promise或fetch周围放置for循环,我也会遇到类似的问题。
所以我的问题是。如果您使用for循环通过API调用获取各种JSON,那么如何使用for循环之外的数据?我需要对数据进行的操作需要全部完成。
我很困惑,因为我感觉Javascript迫使我将与数据关联的操作或代码放在我的注释所在的位置。这正常吗?
解决方法
您拥有Promise.all
API来解决您的问题。此方法将执行传递给它的所有promise,并且在所有ok ok正常之前将无法解决。
这与async/await
一起可以很好地解决您的问题:
async function forFetch(){
let urls = [/* your urls */],fetches = [];
for(let url of urls){
fetches.push(fetch(url));
}
let results = await Promise.all(fetches);
return results; //do whatever you want with your results like converting them to json.
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。