Javascript 在对象数组中循环,为每个对象调用承诺,并在它';完成了
在这个问题中,我尝试循环遍历从promise中检索到的对象数组,以及数组中我想要的每个对象 要求另一个承诺。一旦我调用了所有这些承诺,我想将其记录到控制台 我怎么知道所有的承诺什么时候都完成了Javascript 在对象数组中循环,为每个对象调用承诺,并在它';完成了,javascript,object,ecmascript-6,promise,es6-promise,Javascript,Object,Ecmascript 6,Promise,Es6 Promise,在这个问题中,我尝试循环遍历从promise中检索到的对象数组,以及数组中我想要的每个对象 要求另一个承诺。一旦我调用了所有这些承诺,我想将其记录到控制台 我怎么知道所有的承诺什么时候都完成了 函数myFunction(){ 取回(“https://jsonplaceholder.typicode.com/albums)然后(第一个响应=>{ 首先是_response.json(),然后是(函数(值){ 对于(变量i=0;isecond\u response.json()) .then(值=>
函数myFunction(){
取回(“https://jsonplaceholder.typicode.com/albums)然后(第一个响应=>{
首先是_response.json(),然后是(函数(值){
对于(变量i=0;isecond\u response.json())
.then(值=>console.log(值))
}
log(“完成!!”);
});
});
}
myFunction()代码>
.as console wrapper{max height:100%!important;top:0;}
使用Array.prototype.map
将值
数组转换为承诺数组,并调用。然后在承诺上调用。该数组的所有。您还应该避免将承诺作为回调反模式,只需从一个返回承诺。然后
将其链接到下一个。然后
,而不创建不必要的嵌套:
function myFunction () {
fetch("https://jsonplaceholder.typicode.com/albums")
.then(first_response => first_response.json())
.then(arr => Promise.all(arr.map(item =>
fetch("https://jsonplaceholder.typicode.com/users")
.then(second_response => second_response.json())
.then(value => console.log(value))
)))
.then(() => {
console.log("DONE!!");
});
}
myFunction();
请注意,您当前的代码在第一个响应中似乎没有使用任何东西,除了结果数组的长度,这非常奇怪-如果您想使用正在迭代的项(例如,创建要获取的新URL),在上面的映射函数中使用项
变量。使用数组.prototype.map
将值
数组转换为承诺数组,并调用。然后
调用承诺。该数组的所有
。您还应该避免将承诺作为回调反模式,只需从一个返回承诺。然后
将其链接到下一个。然后
,而不创建不必要的嵌套:
function myFunction () {
fetch("https://jsonplaceholder.typicode.com/albums")
.then(first_response => first_response.json())
.then(arr => Promise.all(arr.map(item =>
fetch("https://jsonplaceholder.typicode.com/users")
.then(second_response => second_response.json())
.then(value => console.log(value))
)))
.then(() => {
console.log("DONE!!");
});
}
myFunction();
请注意,您当前的代码在第一个响应中似乎没有使用任何东西,除了结果数组的长度,这非常奇怪-如果您想使用正在迭代的项(例如,创建要获取的新URL),在上面的映射函数中使用项
变量。您需要收集数组中的承诺并使用,以便在所有操作完成后提供回调。最简单的方法是将for
循环更改为对以下对象的调用:
函数myFunction(){
取回(“https://jsonplaceholder.typicode.com/albums)然后(第一个响应=>{
返回第一个_response.json();
}).然后(函数(值){
const promises=value.map((u,i)=>{
返回取回(“https://jsonplaceholder.typicode.com/users")
.then(second\u response=>second\u response.json())
.then(值=>console.log(值))
});
返回承诺。全部(承诺);
}).然后(()=>console.log(“完成!!”));
}
myFunction()代码>
.as console wrapper{max height:100%!important;top:0;}
您需要收集数组中的承诺并使用,以便在完成所有承诺后提供回调。最简单的方法是将for
循环更改为对以下对象的调用:
函数myFunction(){
取回(“https://jsonplaceholder.typicode.com/albums)然后(第一个响应=>{
返回第一个_response.json();
}).然后(函数(值){
const promises=value.map((u,i)=>{
返回取回(“https://jsonplaceholder.typicode.com/users")
.then(second\u response=>second\u response.json())
.then(值=>console.log(值))
});
返回承诺。全部(承诺);
}).然后(()=>console.log(“完成!!”));
}
myFunction()代码>
。作为控制台包装器{max height:100%!important;top:0;}
您可以使用es6功能承诺功能将所有获取请求收集在一起,如果所有承诺都已完成,则可以打印完成
function myFunction () {
var promises = [];
var promise = undefined;
fetch("https://jsonplaceholder.typicode.com/albums").then(first_response => {
first_response.json().then(function(value) {
for (var i = 0; i < value.length; i++){
promise = fetch("https://jsonplaceholder.typicode.com/users/?id="+value[i].id)
.then(second_response => second_response.json())
.then(value => console.log(value))
promises.push(promise)
}
Promise.all(promises).then(function(){ console.log("Done!");});
});
});
}
函数myFunction(){
var承诺=[];
var承诺=未定义;
取回(“https://jsonplaceholder.typicode.com/albums)然后(第一个响应=>{
首先是_response.json(),然后是(函数(值){
对于(变量i=0;isecond\u response.json())
.then(值=>console.log(值))
承诺。推动(承诺)
}
Promise.all(promises.then(function(){console.log(“Done!”);});
});
});
}
您可以使用es6功能承诺功能将所有获取请求收集在一起,如果所有承诺都已完成,则可以打印完成
function myFunction () {
var promises = [];
var promise = undefined;
fetch("https://jsonplaceholder.typicode.com/albums").then(first_response => {
first_response.json().then(function(value) {
for (var i = 0; i < value.length; i++){
promise = fetch("https://jsonplaceholder.typicode.com/users/?id="+value[i].id)
.then(second_response => second_response.json())
.then(value => console.log(value))
promises.push(promise)
}
Promise.all(promises).then(function(){ console.log("Done!");});
});
});
}
函数myFunction(){
var承诺=[];
var承诺=未定义;
取回(“https://jsonplaceholder.typicode.com/albums)然后(第一个响应=>{
首先是_response.json(),然后是(函数(值){
对于(变量i=0;isecond\u response.json())
.then(值=>console.log(值))
承诺。推动(承诺)
}
Promise.all(promises.then(function(){console.log(“Done!”);});
});
});
}
谢谢,是的。这很奇怪,这是我需要帮助解决的更大问题的一部分。事实上,我将向循环传递值。这些答案对您有帮助吗?如果是这样的话,考虑一下投票和接受其中一个,看看:谢谢,是的。这很奇怪,这是我需要帮助解决的更大问题的一部分。事实上,我将向循环传递值。这些答案对您有帮助吗?如果是这样的话,考虑一下投票并接受其中之一,请看: