如何让一个函数 return 成为一个 promise
How to make a function return a promise
我想return downloadURL
调用这个函数的时候,是一个firebase上传函数。
import { storage } from "./base";
import firebase from "firebase";
function uploadFile(file, metadata) {
return new Promise((resolve, reject) => {
const task = storage.child(`/${file.name}`).put(file, metadata);
task.on(
firebase.storage.TaskEvent.STATE_CHANGED,
function(snapshot) {
var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
console.log(progress);
},
function(error) {
switch (error.code) {
case "storage/unauthorized":
break;
case "storage/canceled":
break;
case "storage/unknown":
break;
default:
break;
}
reject(error);
},
function() {
task.snapshot.ref.getDownloadURL().then(function(downloadURL) {
resolve(downloadURL);
console.log(downloadURL);
});
},
);
});
}
export { uploadFile };
我试过了,return downloadURL
您可以简单地尝试如下:
- 在需要的地方导入文件。
- 然后用相关参数调用函数。
在 promises 中使用 then
方法来获得解析 downloadUrl
uploddFile(file, data).then(downloadUrl => console.log(downloadUrl) );
试试这个。
import { storage } from "./base";
import firebase from "firebase";
function uploadFile(file, metadata) {
return new Promise((resolve, reject) => {
const task = storage.child(`/${file.name}`).put(file, metadata);
task.on(
firebase.storage.TaskEvent.STATE_CHANGED,
function(snapshot) {
var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
console.log(progress);
},
function(error) {
switch (error.code) {
case "storage/unauthorized":
break;
case "storage/canceled":
break;
case "storage/unknown":
break;
default:
break;
}
reject(error);
},
task.snapshot.ref.getDownloadURL().then(function(downloadURL) {
resolve(downloadURL);
console.log(downloadURL);
});
,
);
});
}
想法是在 getDownloadURL 成功后包含 resolve 方法。然后可以按照上面的答案
中提到的调用来检索
uploadFile(file, metaData)
.then((download) => console.log(downloadURL)) ; // Or whatever you want to do wth downloadURL
我想return downloadURL
调用这个函数的时候,是一个firebase上传函数。
import { storage } from "./base";
import firebase from "firebase";
function uploadFile(file, metadata) {
return new Promise((resolve, reject) => {
const task = storage.child(`/${file.name}`).put(file, metadata);
task.on(
firebase.storage.TaskEvent.STATE_CHANGED,
function(snapshot) {
var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
console.log(progress);
},
function(error) {
switch (error.code) {
case "storage/unauthorized":
break;
case "storage/canceled":
break;
case "storage/unknown":
break;
default:
break;
}
reject(error);
},
function() {
task.snapshot.ref.getDownloadURL().then(function(downloadURL) {
resolve(downloadURL);
console.log(downloadURL);
});
},
);
});
}
export { uploadFile };
我试过了,return downloadURL
您可以简单地尝试如下:
- 在需要的地方导入文件。
- 然后用相关参数调用函数。
在 promises 中使用
then
方法来获得解析downloadUrl
uploddFile(file, data).then(downloadUrl => console.log(downloadUrl) );
试试这个。
import { storage } from "./base";
import firebase from "firebase";
function uploadFile(file, metadata) {
return new Promise((resolve, reject) => {
const task = storage.child(`/${file.name}`).put(file, metadata);
task.on(
firebase.storage.TaskEvent.STATE_CHANGED,
function(snapshot) {
var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
console.log(progress);
},
function(error) {
switch (error.code) {
case "storage/unauthorized":
break;
case "storage/canceled":
break;
case "storage/unknown":
break;
default:
break;
}
reject(error);
},
task.snapshot.ref.getDownloadURL().then(function(downloadURL) {
resolve(downloadURL);
console.log(downloadURL);
});
,
);
});
}
想法是在 getDownloadURL 成功后包含 resolve 方法。然后可以按照上面的答案
中提到的调用来检索 uploadFile(file, metaData)
.then((download) => console.log(downloadURL)) ; // Or whatever you want to do wth downloadURL