export async function getImage(key){
let url = '';
try{
const imageRef = storage().ref(key)
url = await imageRef.getDownloadURL();
}catch(e){ console.log(e)}
return url;
}
然后...在通话中
imageUrl='';
getImage(email).then((url) => {
imageUrl = url
console.log('imageUrl1:',imageUrl);
})
console.log('imageUrl2:',imageUrl);
结果:
imageUrl2:
imageUrl1:url:https://firebasestorage.googleapis.com/....。
我首先希望imageUrl1的日志。...
答案 0 :(得分:0)
getImage(email).then((url) => {
imageUrl = url
console.log('imageUrl1:',imageUrl);
})
.then将始终在执行getImage()之后运行。这意味着在这种情况下,您的imageUrl2将首先运行。
答案 1 :(得分:0)
您所看到的是JavaScript预期的结果,与您使用的Firebase SDK无关。在JavaScript中,返回承诺的函数是异步,并且会在实现或拒绝承诺之前立即返回。您应该知道then
还会异步返回一个Promise。 它不会阻止您的代码执行,也不会等待承诺被解决。您的代码将在执行任何then
或catch
之后继续执行。
在您的特定情况下,第二条日志行将立即以初始空字符串值imageUrl
打印。在then
返回的诺言值实现后,一段时间后会调用您提供给getImage
的回调函数。
答案 2 :(得分:0)
尝试一下
export async function getImage(key){
let url = '';
try{
const imageRef = await storage().ref(key)
url = await imageRef.getDownloadURL();
return url;
}catch(e){
console.log(e)
}
};
const url = await getImage(email);
console.log('imageUrl:',url);