Firebase 原型链错误时反应本机可枚举键

Firebase 原型链错误时反应本机可枚举键,firebase,react-native,firebase-storage,expo,Firebase,React Native,Firebase Storage,Expo,我试图将base64映像上载到Firebase存储,但出现以下错误: assign的一个源在原型链上有一个可枚举键。您正在尝试分配原型属性吗?我们不允许这样做,因为这是一个我们不支持的边缘案例 继续EXPO@19.0.0(与v18上的问题相同)和React@16.0.0-alpha.12(世博会v19附带) 我使用的函数如下 资料来源: const addSignService=(signData,imageAsBase64,文件名)=>{ _uploadAsByteArray(convertT

我试图将base64映像上载到Firebase存储,但出现以下错误:

assign的一个源在原型链上有一个可枚举键。您正在尝试分配原型属性吗?我们不允许这样做,因为这是一个我们不支持的边缘案例

继续EXPO@19.0.0(与v18上的问题相同)和React@16.0.0-alpha.12(世博会v19附带)

我使用的函数如下 资料来源:

const addSignService=(signData,imageAsBase64,文件名)=>{
_uploadAsByteArray(convertToByteArray(imageAsBase64)),文件名,(进度)=>{
console.log(“上传asbytearray回调”+进度);
//this.setState({progress})
});
}
const\u uploadAsByteArray=async(pickerResultAsByteArray,filename,progressCallback)=>{
console.log(“u uploadAsByteArray”);
试一试{
变量元数据={
contentType:“图像/jpeg”,
};
var ref=storageRef.child('images/'+firebaseAuth().currentUser.uid+'/'+filename);
console.log('before upload');
让uploadTask=ref.put(pickerResultAsByteArray,元数据);
uploadTask.on('state_changed',函数(快照){
progressCallback&&progressCallback(snapshot.ByTestTransfered/snapshot.totalBytes)
var progress=(snapshot.bytesttransfered/snapshot.totalBytes)*100;
log('Upload is'+progress+'%done');
console.log(“日志测试”);
},函数(错误){
log(“in\u uploadAsByteArray”,错误);
},函数(){
console.log('function');
var downloadURL=uploadTask.snapshot.downloadURL;
console.log(“\u uploadAsByteArray”,uploadTask.snapshot.downloadURL)
});
}捕获(ee){
log(“当试图加载时,上传asbytearray”,ee)
}
}
const convertToByteArray=(输入)=>{
log('convertToByteArray');
var二进制字符串=atob(输入);
var len=二进制字符串长度;
var字节=新的Uint8Array(len);
对于(变量i=0;i{
console.log('atob');
常量字符='abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyzo123456789+/=';
设str=input.replace(/=+$/,“”);
让输出=“”;
如果(str.length%4==1){
抛出新错误(“'atob'失败:要解码的字符串编码不正确。”);
}
对于(设bc=0,bs=0,buffer,i=0;
buffer=str.charAt(i++);
~buffer&(bs=bc%4?bs*64+buffer:buffer,
bc++%4)?输出+=String.fromCharCode(255&bs>>(-2*bc&6)):0
) {
缓冲区=字符索引(缓冲区);
}
返回输出;
}

当调用
Firebase.put()
激活React Native/iOS远程调试器时,将出现此错误。停用调试器解决了错误,并且函数工作正常

感谢Github上的aaronksaunders提供的帮助。

刚刚把我从兔子洞里救了出来。谢谢
const addSignService = (signData, imageAsBase64, filename) => {        
  _uploadAsByteArray(convertToByteArray(imageAsBase64), filename, (progress) => {
    console.log('_uploadAsByteArray callback '+progress);
    //this.setState({ progress })
  });
}

const _uploadAsByteArray = async (pickerResultAsByteArray, filename, progressCallback) => {
  console.log('_uploadAsByteArray');
  try {

    var metadata = {
      contentType: 'image/jpeg',
    };

    var ref = storageRef.child('images/'+ firebaseAuth().currentUser.uid + '/' + filename);
    console.log('before upload');

    let uploadTask = ref.put(pickerResultAsByteArray, metadata);

    uploadTask.on('state_changed', function (snapshot) {

      progressCallback && progressCallback(snapshot.bytesTransferred / snapshot.totalBytes)

      var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
      console.log('Upload is ' + progress + '% done');
      console.log('log test');

    }, function (error) {
      console.log("in _uploadAsByteArray ", error);

    }, function () {
      console.log('function');
      var downloadURL = uploadTask.snapshot.downloadURL;
      console.log("_uploadAsByteArray ", uploadTask.snapshot.downloadURL)

    });
  } catch (ee) {
    console.log("when trying to load _uploadAsByteArray ", ee)
  }
}

const convertToByteArray = (input) => {
  console.log('convertToByteArray');

  var binary_string = atob(input);

  var len = binary_string.length;
  var bytes = new Uint8Array(len);
  for (var i = 0; i < len; i++) {
    bytes[i] = binary_string.charCodeAt(i);
  }
  return bytes
}

const atob = (input) => {
  console.log('atob');

  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';

  let str = input.replace(/=+$/, '');
  let output = '';

  if (str.length % 4 == 1) {
    throw new Error("'atob' failed: The string to be decoded is not correctly encoded.");
  }
  for (let bc = 0, bs = 0, buffer, i = 0;
    buffer = str.charAt(i++);

    ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,
      bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0
  ) {
    buffer = chars.indexOf(buffer);
  }

  return output;
}