javascript 使用expo和React Native将图像上传到Firebase存储(v 9.xx),(参考未定义?)

piwo6bdm  于 2023-01-11  发布在  Java
关注(0)|答案(1)|浏览(111)

可能未处理的承诺拒绝(ID:0):类型错误:_ref2不是函数。(在“_ref2(storage,“image.jpg”)“中,”_ref2“未定义)
我有时会遇到同样的问题,但未定义_ref而不是_ref2
我试着把ref、getStorage和uploadBytes的导入搞得一团糟,我可以看到我的导入中的ref值从“firebase/storage”导入{ getStorage,ref,uploadBytes };是模糊的,但是getStorage和uploadBytes读取。
下面是我的完整代码:

import { getStorage, ref, uploadBytes } from "firebase/storage";
 import React, {useState} from 'react'

 const [image, setImage] = useState(null);
 const [uploading, setUploading] = useState(false);

 const pickImage = async () => {
 let result = await ImagePicker.launchImageLibraryAsync({
 mediaTypes: ImagePicker.MediaTypeOptions.All
 allowsEditing: true,
 aspect: [9, 16],
 quality: 1,
 });

 console.log(result);

 if (!result.canceled) {
    setImage(result.assets[0].uri);

    const storage = getStorage();
    const ref = ref(storage, "image.jpg");

    const img = await fetch(result.assets[0].uri);
    const bytes = await img.blob();

    await uploadBytes(ref, bytes);
 }
 };

另外,URI只是被取消,现在我必须使用result.assets[0].uri显然。
有人能帮帮我吗?先谢了。

yacmzcpb

yacmzcpb1#

将此作为社区wiki发布以帮助其他社区成员。
正如@Dharmaraj所说,不要将变量命名为与任何函数名称相同的名称。
如果函数名和变量名相同,则Javascript引擎将忽略该变量。使用变量A可以创建新变量。声明实际上被提升到当前作用域的开头(在函数定义之前)。之后,同名函数将用完该名称。
试试看:

const storageRef = ref(storage, "image.jpg");
await uploadBytes(storageRef, bytes);

相关问题