reactjs - 我有一个函数,我想在任务完成后返回多个对象(反应原生)
问题描述
export const Upload = async(image) => {
const filename = `patient/${firebase.auth().currentUser.uid}/${Math.random().toString(36)}`;
const response = await fetch(image);
const blob = await response.blob();
const task = firebase.storage().ref().child(filename).put(blob);
// set progress state
const taskProgres = (snapshot) => {
console.log(Math.round(snapshot.bytesTransferred / snapshot.totalBytes) * 10000);
};
const taskComplet = () => {
task.snapshot.ref.getDownloadURL().then((snapshot) => {
return(snapshot)
});
};
const taskError = (snapshot) => {
console.log(snapshot);
};
task.on("state_changed", taskProgres, taskError, taskComplet);
};
调用此函数时,我希望它在 taskProgres 完成以及 taskComplet 完成时返回是可以通过的以及如何调用它
解决方案
如果我理解正确,您希望函数在上传完成后返回。
在这种情况下,考虑返回task
自身,这是一个在上传完成时解决的承诺。
如果你想返回下载 URL,你可以这样做:
export const Upload = async(image) => {
const filename = `patient/${firebase.auth().currentUser.uid}/${Math.random().toString(36)}`;
const response = await fetch(image);
const blob = await response.blob();
const task = firebase.storage().ref().child(filename).put(blob);
await task;
const downloadUrl = await task.snapshot.ref.getDownloadURL()
return downloadUrl;
};
如果你想在调用函数中处理进度,并让它返回生成的下载 URL,你需要传入一个回调,因为你不能返回两个不同时间到达的结果。
看起来像这样:
export const Upload = async(image, progressCallback) => {
const filename = `patient/${firebase.auth().currentUser.uid}/${Math.random().toString(36)}`;
const response = await fetch(image);
const blob = await response.blob();
const task = firebase.storage().ref().child(filename).put(blob);
task.on("state_changed", progressCallback);
await task;
const downloadUrl = await task.snapshot.ref.getDownloadURL()
return downloadUrl;
};
然后你会这样称呼它:
const downloadURL = await Upload(imageURL, (taskSnapshot) => {
console.log(Math.round(taskSnapshot.bytesTransferred / taskSnapshot.totalBytes) * 10000)
});
console.log(downloadURL);
推荐阅读
- php - 我无法将带有字符和编程语言脚本的文章插入数据库
- ssl - 使用 SSL = on 的 PostgreSQL 基本身份验证
- angular - 我如何动态导出变量角度
- c - 使用链表实现堆栈时出现分段错误
- sql - 重复记录需要删除oracle db
- javascript - 单击提交按钮后将状态设置为初始状态
- typescript - 模拟 AWS 服务和 Lambda 最佳实践
- flutter - 为什么我的 ScrollController 在来回导航或重新启动时会抛出错误?
- git - 限制 Github 访问 ssh 和 https URL 中的单个存储库
- java - 两个类中的代码重复java对象