需要指导!尝试了解fetch()和承诺

时间:2018-08-16 19:34:06

标签: javascript firebase react-native promise git-fetch

基本上,我正在尝试使用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);)

扰流板警报。我尝试了,但没有。但是我不明白为什么。

1 个答案:

答案 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))