Javascript Firebase getDownloadURL()未更新全局变量
我有以下脚本Javascript Firebase getDownloadURL()未更新全局变量,javascript,firebase-storage,Javascript,Firebase Storage,我有以下脚本 let link = "" let baseUrl = "Test-Dataset/" let imageRef = "2.jpg" storage.ref(baseUrl + imageRef).getDownloadURL().then( function(url) { link = url console.log(url) }).catch(function(error) { });
let link = ""
let baseUrl = "Test-Dataset/"
let imageRef = "2.jpg"
storage.ref(baseUrl + imageRef).getDownloadURL().then(
function(url) {
link = url
console.log(url)
}).catch(function(error) {
});
console.log(link)
我的目标是在使用getDownloadURL()
返回承诺并等待解决后,使用图像URL的值更新link
变量。.this()中的console.log
函数正输出我所需的内容-指向firebase存储中图像的链接。但是,函数外部的console.log
正在返回调用我的firebase存储之前的链接的初始值,即“
。为什么会发生这种情况?我的解决方案是否与中概述的异步函数类似
详细信息:我正在使用vue和npm库firebase
发生这种情况是因为您的console语句在承诺解决之前运行。这与Firebase无关
情况就是这样:
链接
变量用空字符串声明
一个处理函数被添加到承诺中:。然后(函数(url){…})
console.log(link)
输出仍然是空字符串的link的值
承诺解析并将链接设置为url
尝试在代码的末尾添加以下内容,以便更清楚地看到效果:
setTimeout(() => {
console.log(link);
}, 1000);
这将在1秒后输出link
的值。它的值应该是您想要的URL
要解决此问题,可以使用async/await
const getLink=async(ref)=>{
const url=await storage.ref(ref).getDownloadURL();
返回url;
}
//注意:使用'await'的函数必须是'async'`
//因此,无论哪个函数使用getLink(),都必须是异步的
函数async someFunction(){//可能是Vue方法?
const url=wait getLink(baseUrl+imageRef);
console.log(url);
}
要添加错误处理,请使用try/catch块:
函数异步someFunction(){
试一试{
const url=await storage.ref(baseUrl+imageRef).getDownloadURL();
console.log(url);//如果获取url失败,此操作将不会运行
}捕获(错误){
//处理错误
}
}