我知道这已经被询问了无数次。我自己问过具体到下面的代码,我不知道为什么无法解决。
const householdPics = (data, props) => {
let refImg;
async function refDetails() {
let urlResult;
const ref = await props.firebase.storageRef(`images/${data.profilePic}`);
return urlResult = new Promise((resolve, reject) => {
ref.getDownloadURL()
.then(url => resolve(url))
.catch(e => reject(e))
})
}
if (!data.profilePic || data.profilePic == 'NULL') {
refImg = require("../../assets/img/empty-avatar.png");
} else {
refImg = refDetails();
}
我确定我已经使这个问题复杂化了,一直以来我都感到困惑。
我希望refImg = refDetails();
可以解析为网址。
如果我console.log urlResult
,我会从firebase获得img网址。
但是,当我在另一个代码块中使用refImg时:
src显示为“对象承诺”
我也尝试过:
async function refDetails() {
const ref = await props.firebase.storageRef(`images/${data.profilePic}`);
const refUrl = await ref.getDownloadURL();
return refUrl;
}
这是我在阅读了更多内容之后尝试的另一种尝试。仍然失败:(
let refImg;
function refDetails() {
const ref = props.firebase.storageRef(`images/${data.profilePic}`);
const imgUrl = ref.getDownloadURL()
return imgUrl.then(url => {return url})
}
if (!data.profilePic || data.profilePic == 'NULL') {
refImg = require("../../assets/img/empty-avatar.png");
} else {
const resultImg = refDetails();;
refImg = resultImg;
}
如何将ref.getDownloadURL()的返回值传递给refImg?
答案 0 :(得分:0)
尝试:
const householdPics = async (data, props) => {
let refImg;
async function refDetails() {
let urlResult;
const ref = await props.firebase.storageRef(`images/${data.profilePic}`);
return await ref.getDownloadURL():
}
if (!data.profilePic || data.profilePic == 'NULL') {
refImg = require("../../assets/img/empty-avatar.png");
} else {
refImg = await refDetails();
}
ref.getDownloadURL()
是一个Promise,为了使用结果值(即url),您必须在.then
的回调中获取它,或者使用async await
语法,使异步过程似乎像我先前的回答一样进行同步。
imgUrl.then(url => {return url})
Promise.then()也是Promise,因此您在第二次尝试中仍会在函数中返回promise。因此,refImg = resultImg
使得refImg
成为“返回URL的承诺”。
您认为上一个答案不起作用的原因可能是您打电话给householdPics()
并尝试在不使用.then
或await
的情况下获取值。由于我将householdPics
设为异步函数,因此它将始终返回Promise。同样,您必须使用.then
或await
获取值。
我刚刚尝试过返回异步功能中的承诺。看来,如果您在类似以下的异步函数中返回Promise而不是已解析的值:
async function refDetails() {
let urlResult;
const ref = await props.firebase.storageRef(`images/${data.profilePic}`);
return ref.getDownloadURL():
}
然后等待该功能:
refImg = await refDetails();
它仍然解析并返回Promise的值。因此,如果要返回await
,请在异步函数中保存该df.columns = ['c1','c1T1','c2','c2T1',...........,'c10','c10T1',
'c30','c30T2','c40','c40T2',...........,'c60','c60T2']
(尽管它很容易混淆,但我不建议这样做)。