首页 > 解决方案 > JS Promise 被忽略(不确定)

问题描述

我正在用 javascript 开发一个类似警报的功能,但遇到了麻烦。第一个函数 (prepBkCrt) 的代码如下所示:

function prepBkCrt() {
    event.preventDefault();
    crtBkMnl = true;
    crtBkCnl = false;
    const url = crtBkTab.querySelector("#url");
    const name = crtBkTab.querySelector("#name");
    if (name.value.length >= 17) {
        poper("Bookmark","I will pass this part",true).then((response) => {
            if (response === false) {
                crtBkCnl = true;
                hideBkTab();
                return;
            }
        });
    }
    addBookmark(url.value,name.value);
    if (crtBkCnl === false) {
        poper("Bookmark","Bookmark successfully created!",false);
    }
    url.value = "";
    name.value = "";
}

第二个函数如下所示:

function poper(headerTxt, descTxt, option) {
    return new Promise((resolve, reject) => {
        const poper = document.querySelector("#poper");
        const header = poper.querySelector("h2");
        const buttonDiv = poper.querySelector("div");
        const desc = poper.querySelector("span");
        header.innerText = headerTxt;
        desc.innerHTML = descTxt;

        const yBtn = buttonDiv.querySelectorAll("button")[0];
        yBtn.addEventListener("click", (event) => {poper.style.transform = "translateY(-300px)"; resolve(true);});
        
        const nBtn = buttonDiv.querySelectorAll("button")[1];
        nBtn.addEventListener("click", (event) => {poper.style.transform = "translateY(-300px)"; resolve(false);});

        if (option === false) {
            nBtn.style.display = "none";
        } else {
            nBtn.style.display = "block";
        }

        poper.style.transform = "none";
        setTimeout(() => {poper.style.transform = "translateY(-300px)"; resolve(false);},10000);
    });
}

这曾经在其他代码上运行良好,但似乎不适用于这个 javascript 文件。我已经检查过它确实运行了poper函数中的第一个函数prepBkCrt,这就是问题所在。预期的行为是,如果name.value的长度超过 17,它应该运行poper函数(它应该像 这样工作,并运行这个,但代码只运行第二个图像。有什么问题?

标签: javascriptfunctionpromise

解决方案


你似乎在寻找一个else声明。回调内部不会中断return..then()prepBkCrt

function prepBkCrt() {
    event.preventDefault();
    crtBkMnl = true;
    crtBkCnl = false;
    const url = crtBkTab.querySelector("#url");
    const name = crtBkTab.querySelector("#name");
    if (name.value.length >= 17) {
        poper("Bookmark","I will pass this part",true).then(response => {
            if (response === false) {
                crtBkCnl = true;
                hideBkTab();
            }
        });
    } else {
        addBookmark(url.value,name.value);
        poper("Bookmark","Bookmark successfully created!",false);
        url.value = "";
        name.value = "";
    }
}

推荐阅读