gpt4 book ai didi

javascript - 如何等待 React Native Image Picker 回调函数响应?

转载 作者:行者123 更新时间:2023-12-04 08:13:24 27 4
gpt4 key购买 nike

我想制作一个函数,将从 react-native-image-picker 中选取的照片上传到 firestore,然后返回上传图像的 URL 值。照片上传成功,我可以在控制台中打印下载 URL,问题是当我尝试在函数中返回 URL 时,它是未定义的。我尝试使用异步函数在返回值之前等待图像选择器响应完成,但它仍然返回 {"_U": 0, "_V": 0, "_W": null, "_X": null} .

uploadImg: async () =>{
await ImagePicker.launchImageLibrary({ mediaType: 'photo' }, response => {
if (response.error) {
alert('Something went wrong');
} else {
try {
const { path, uri } = response;
const fileSource = Platform.OS === 'android' ? uri : path;
const { fileName } = response;
const storageRef = storage().ref(fileName);

storageRef.putFile(fileSource).on('state_changed', snapshot => {
switch (snapshot.state) {
case 'running':
setImageURI(null);
break;
case 'success':
snapshot.ref.getDownloadURL().then(downloadURL => {
setImageURI(downloadURL);
//This console log works, and actually prints the correct url
console.log(`Download URL ${downloadURL}`);
});
break;
default:
break;
}

});
} catch (error) {
console.log(error)
}
}
});
return imageURI;
}
我很确定问题不在于状态、上传图片或图像选择器响应。这可能是异步函数的错误使用。

最佳答案

这是因为您在 firebase 调用完成执行之前从您的函数返回。我对您的代码进行了一些更新,以便该函数可以等待 firebase 响应。

uploadToFirebase: ( fileName, filesource )=>new Promise((resolve, reject)=>{
const storageRef = storage().ref(fileName);
storageRef.putFile(fileSource).on('state_changed', snapshot => {
switch (snapshot.state) {
case 'running':
setImageURI(null);
break;
case 'success':
snapshot.ref.getDownloadURL().then(downloadURL => {
setImageURI(downloadURL);
//This console log works, and actually prints the correct url
console.log(`Download URL ${downloadURL}`);
});
break;
default:
break;
}
resolve();
});
})
uploadImg: async () =>{
let response = await ImagePicker.launchImageLibraryAsync({ mediaType: 'photo' });
if (response.error) {
alert('Something went wrong');
} else {
const { path, uri } = response;
const fileSource = Platform.OS === 'android' ? uri : path;
const { fileName } = response;
await uploadToFirebase(fileName, fileSource)
}
return imageURI;
}

关于javascript - 如何等待 React Native Image Picker 回调函数响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65837081/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com