【发布时间】:2020-10-14 15:42:19
【问题描述】:
我必须回到这个论坛寻求帮助,因为我仍然无法让 'Promise.all' 工作!
首先,我有这个函数,它应该返回一个承诺:
const myFetch = (a, b) => {
var url;
// some stuff bulding 'url' using a and b
fetch(url).then(response => {
return response.json();
}
})
这个想法是上面的函数返回一个promise,它的值,一旦被解析,就是json对象。我检查了 json 实际上是有效的。如果我用下面的行替换“return ...”行,我实际上得到了一个有效的 json:
response.json().then(res=> console.log(res))
其次,我有这个 for 循环,之后我希望有一个 promise 数组:
promises = [];
for (...){
// some other stuff
promises.push(myFetch(a, b))
}
最终我执行了这段代码:
Promise.all(promises)
.then(responses => { // <=== Here I get all "undefined"
responses.forEach(response => {
console.log(response);// <=== Here I get all "undefined"
});
// some other stuff that I can do only after all fetches are complete
})
我希望 .then 部分仅在所有承诺都解决后才执行,并且还希望“响应”是来自上述各个承诺的所有 json 响应的列表。尽管如此,我还是得到了一串“未定义”。给人的印象是 .then 中的代码部分正在运行,即使承诺尚未解决。
我做错了什么?在继续之前,如何确保从各个提取中获取所有 json 对象? (注意,我不能使用等待/异步)。谢谢
【问题讨论】:
-
您的
myFetch()没有返回任何内容,您需要执行类似return fetch(url).then(...);的操作 -
.then里面有一个return
-
你确定你所有的请求都给出了正确的响应,就像你承诺的失败一样。所有的都失败了
-
@Bob-it 返回不会返回到您的
myFetch()调用,而是返回到.then()中提供的回调 -
你可能是对的。现在我正在尝试两个“返回”,正如 Terry Lennox 的回答中所建议的那样,它似乎正在工作
标签: javascript promise