我有一个从Firebase或本地保存的图片获取图片的函数。为此,我使用了承诺。如果Firebase中没有图片可以获取,它应该返回错误的名称。这就是这个函数。
function getPic(index){
let pic = document.createElement("img");
let errorName;
if(tempPhotos[index] == undefined){
storageRefPhotos.listAll().then(res=>{
res.items[index].getDownloadURL().then(url=>{
pic.src = url;
pic.classList.add("horizontal");
})}).catch(error => {
console.log("The function found an "+ error.name);
return error.name;
});
tempPhotos[index] = pic;
console.log("Got it from Firebase");
return pic;
}
else{
console.log("Got it locally");
return tempPhotos[index];
}
}
这一行 console.log("The function found an "+ error.name);
是按原计划执行的。然而,在下面的代码中,即使执行了上面的一行,也总是执行 else 语句。
const nextPic = getPic(currentPhoto+1);
if(nextPic.name==="TypeError"){
console.log("Executing the if");
console.log("The EventListener found a "+nextPic.name);
}
else{
console.log("Executing the else");
gallery.replaceChild(nextPic, arrow_left.nextElementSibling);
currentPhoto++;
}
这背后的想法是创建一个图片幻灯片。当没有更多的图片时,应该从头开始。这段文字上面的代码是一个EventListener的一部分。
非常感谢
EDIT:
我已经修改了我的函数
function getPic(index){
let pic = document.createElement("img");
if(tempPhotos[index] == undefined){
storageRefPhotos.listAll().then(res=>{
res.items[index].getDownloadURL().then(url=>{
pic.src = url;
pic.classList.add("horizontal");
tempPhotos[index] = pic;
cl("Got it from Firebase");
return pic;
})
}).catch(error => {
console.log("The function found an "+ error.name);
return error.name;
});
}
else{
cl("Got it locally");
return tempPhotos[index];
}
}
现在,它总是返回undefinded。我不明白为什么。另外,我把 nextPic.name 改为 nextPic。
因为你检查的是 nextPic.name==="TypeError"
也就是 undefined
和 undefined不等于TypeError。
您已经返回了一个 error.name
您应该只检查
if (nextPic=="TypeError")