反应本机可能未处理的承诺拒绝(id:0):

时间:2018-12-18 18:35:41

标签: javascript reactjs react-native expo catch-block

我正在尝试从博览会相机保存图片。之后,我将把这张照片发送到cloudinary。因此,我需要base64属性。但是我有一个问题。

takePictureAndCreateAlbum = async () => {
    const { uri } = await this.camera.takePictureAsync({
      base64: true
    }).then(data => {
      return (
        this.setState({
          data
        }),
        console.log("data", data)
      )
    }).catch(err => {
      throw error;}
      )
      const asset = await MediaLibrary.createAssetAsync(uri);
      MediaLibrary.createAlbumAsync('Expo', asset)
        .then(() => {
          Alert.alert('Album created!')
        })
        .catch(error => {
          Alert.alert('An Error Occurred!')
        });

        this.sendCloudinary(this.state.data)
  };

当我尝试保存图片时,出现以下错误:

可能的未处理承诺拒绝(id:0):

TypeError:无法读取未定义的属性“ uri”

我检查了另一个问题和答案。但是我没有找到解决方案。我该如何解决?

1 个答案:

答案 0 :(得分:0)

您可能想要更多类似的东西。

  takePictureAndCreateAlbum = async () => {
    const { uri } = await this.camera
      .takePictureAsync({
        base64: true
      })
      .then(data => {
        this.setState({
          data
        }),
          console.log("data", data);
        return data;
      })
      .catch(err => {
        throw error;
      });
    const asset = await MediaLibrary.createAssetAsync(uri);
    MediaLibrary.createAlbumAsync("Expo", asset)
      .then(() => {
        Alert.alert("Album created!");
      })
      .catch(error => {
        Alert.alert("An Error Occurred!");
      });

    this.sendCloudinary(this.state.data);
  };

在上面发布的示例中,您将返回this.setState和控制台日志的组合,此时应从初始takePictureAsync承诺解决之日起返回数据。