基本上,我正在尝试使用firebase函数/ storeImage和JSON.Stringify()获取已上传(到Firebase)的两个图像的URL和URLPath。
下面是一段代码,使我能够获取一张图像的数据。
.then(token => {
authToken = token;
return fetch("myappURL/storeImage",
{
method: "POST",
body: JSON.stringify({
image: image.base64
}),
headers: {
Authorization: "Bearer " + authToken,
}
});
})
.catch(err => {
console.log(err);
alert("Oops! Something went wrong, please try again1")
dispatch(uiStopLoading());
})
.then(res => {
if (res.ok) {
return res.json();
} else {
throw(new Error());
}
})
.then(parsedRes => {console.log(parsedRes);
现在我想从第二张图像中获取数据。
我从阅读的文档中收集到的信息是,我应该对多个异步调用使用promise,例如上面的内容。所以,这样的东西(见下文)行不通吗?
.then(token => {
authToken = token;
let image = fetch(... image: image.base64 ...);
let coverImage = fetch(... coverImage: coverImage.base64 ...);
Promise.all([image, coverImage])
.then(ress => { ress.forEach(
res => {
process( res.json() );
})
})
.catch(err => {...})
.then(res => {...})
.then(parsedRes => {console.log(parsedRes);)
扰流板警报。我尝试了,但没有。但是我不明白为什么。
答案 0 :(得分:1)
将承诺链接在一起时,即在then
回调中启动新的承诺,您需要返回。
Promise.all
返回一个新的诺言,当传递给它的所有诺言中的 all 解析时,它就会解决。在上面的代码中,您忽略了将其返回。
例如尝试运行这段记录undefined
Promise.resolve()
.then(() => {
Promise.all([Promise.resolve(1), Promise.resolve(2)])
})
.then(result => console.log(result))
此代码记录了[1, 2]
Promise.resolve()
.then(() => {
return Promise.all([Promise.resolve(1), Promise.resolve(2)])
})
.then(result => console.log(result))