承诺执行不等待响应被解决

时间:2018-08-22 19:05:06

标签: javascript reactjs react-native

我不知道如何让那个承诺像预期的那样运作。 我被困在这里一天。请帮助我完成任务。

我多次请求API时的一般情况。让我告诉您摘要。

 .then((responseData) => {
    console.log("Facebook Share Api Test")
    console.log(responseData)
    // After receiving result checking Platform
    // If this is iOS we should let our result image links be fetched to encode it in Base64.
    if(Platform.OS != 'android'){
      let imgUrl
      let photoInfo
      let sharePhotoContent
      let x = function (respData) {
        return new Promise((resolve) => {
          return respData.photos.map(async(value) => {
            let iconURL = API.SERVER_URL + API.SERVICE_PORT + API.HEAD_ICON_RES_URL + value.photo_id + 'S'
            let x = await Promise.all(RNFetchBlob
            .fetch('GET', iconURL)
            .then(res => res.data)
            .then(resData => {
                imgUrl = 'data:image/jpeg;base64,' + resData
                console.log(imgUrl) 
                return imgUrl
            })
            .then(img => {
              console.log(img) 
              let res = {
                imageUrl: img
              } 

            })
            .catch(err => {
              console.log(err)
            }))
            await console.log(x)
            return x
          })
        })
      }

      x(responseData)
      .then((res) => {
        console.log('res', res)
        sharePhotoContent = {
          contentType: 'photo',
          photos: res
        }
        ShareDialog.canShow(sharePhotoContent)
        .then((canShow) => {
          console.log(canShow)
          if (canShow) {
            return ShareDialog.show(sharePhotoContent);
          }
        })
        .then((result) => {
          console.log(result)
          // if (result.isCancelled) {
          //    setTimeout(() => alert("Cancelled"), 100)
          // }
          setTimeout(() => alert("Success!"), 100)
        })
        .catch(error => {
          console.log(error)
          // setTimeout(() => alert('Share fail with error: ' + error), 100)
          }
        )
      })

在第一个请求收到响应之后,一切都会进行。我想让我的代码表现为这种方式:

  1. 以照片ID为数组的响应,用于映射并在每次迭代时发送请求以获取图像主体。因为react-native-fbsdk(^ 0.5.0)可与base64一起使用。
  2. 等待解决,直到所有图像base64正文都将被提取并准备好返回为止。
  3. 制作正确的图像base64数据uri,以将其附加到Facebook ShareDialog。
  4. 使用完全加载的base64图像和正确构造的数据uri启动ShareDialog之后。

我的代码成功获取了base64主体,但是不想等待执行成功同步执行其他操作。当我的Promise开始RNFetch base64图像主体时,它使ShareDialog起作用,导致致命错误,因为图像尚未完全获取。

我感谢您的帮助。

0 个答案:

没有答案