Не удается найти переменную atob React Native + Ошибка Firebase - PullRequest
0 голосов
/ 16 июня 2020

У меня есть экран публикации, где я могу выбрать изображение из фотопленки и ввести текст, и я хочу, чтобы оно было сохранено в Firebase. Вот мой код в fire.js

 addPost = async({text,localUri}) => {
    const remoteUri = await this.uploadPhotoAsync(localUri)

    return new Promise((res,rej) => {
        this.firestore.collection("posts").add({
            text,
            uid: this.uid,
            timestamp:this.timestamp,
            image: remoteUri
        })
        .then(ref => {
            res(ref)
        })
        .catch(error => {
            rej(error)
        })
    })
}

uploadPhotoAsync = async uri => {
    const path =  `photos/${this.uid}/${Date.now()}.jpg`

    return new Promise(async (res,rej) => {
        const response = await fetch(uri)
        const file = await response.blob()

        let upload = firebase.storage().ref(path).put(file)

        upload.on(firebase.storage.TaskEvent.STATE_CHANGED,snapshot => {},
        err => {
            rej(err)
        },
        async () => {
            const url = await upload.snapshot.ref.getDownloadURL()
            res(url)
        }
        )
    })
}

А вот мой postscreen.js экран, на котором я получаю сообщение об ошибке can't find variable atob,

, пожалуйста, предложите мне решение.

handlePost = () => {
 Fire.shared.addPost({text:this.state.text.trim(),
  localUri:this.state.image })
   .then(ref => {
    this.setState({text:"",image:undefined})
    this.props.navigation.goBack()
     }).catch(error => {
       alert(error)
     })
   }



 pickImage = async () => {
     let result = await ImagePicker.launchImageLibraryAsync({
       mediaTypes: ImagePicker.MediaTypeOptions.Images,
       allowsEditing:true,
       aspect:[4,3]
     })

 if(!result.cancelled) {
   this.setState({image: result.uri})
 }

}

Кстати, я вижу, что изображение сохранено в хранилище Firestore, но я не вижу текст и фото в Firestore базе данных

1 Ответ

0 голосов
/ 16 июня 2020

Это ошибка в некоторых версиях firebase.

Обходной путь - импортировать base64 в app.js и определить его, если он не определен.

import {decode, encode} from 'base-64'

if (!global.btoa) { global.btoa = encode }
if (!global.atob) { global.atob = decode }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...