为什么我的.catch()函数不能返回承诺中的错误名称?

问题描述 投票:-1回答:1

我有一个从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。

javascript firebase promise try-catch
1个回答
0
投票

因为你检查的是 nextPic.name==="TypeError" 也就是 undefinedundefined不等于TypeError。

您已经返回了一个 error.name您应该只检查

if (nextPic=="TypeError")
© www.soinside.com 2019 - 2024. All rights reserved.