javascript - 这两个 promise 和我期望发生的事情之间的区别

标签 javascript promise domdocument

我有两个 promise 在等待 A) 元素出现或 B) 元素消失时被调用

 * Wait for DOM element to Disappear
 * @param {String} element DOM element to be watched
 */
export const elementVisibilityWatcherDisappear = ClientFunction((element) => {
    return new Promise(resolve => {
        var interval = setInterval(() => {
            if (document.querySelector(element)){
                return;
            }
            clearInterval(interval);
            resolve();
        }, 100);
    });
})

/**
 * Wait for DOM element to Appear
 * @param {String} element DOM element to be watched
 */
export const elementVisibilityWatcherAppear = ClientFunction((element) => {
    return new Promise(resolve => {
        var interval = setInterval(() => {
            if (!document.querySelector(element)){
                return;
            }
            clearInterval(interval);
            resolve();
        }, 100);
    });
})

document.querySelector(element) 返回什么?如果在 DOM 中找不到该元素,它不会返回 null 吗?因此,对于 IF 语句中的方法“elementVisibilityWatcherDisappear”,当 querySelector 返回 true 时,它​​不会返回“true”,从而解决了 promise ......

然而,这与我所看到的相反。当调用 disappear 方法时,当元素不再是 dom 的一部分时,该方法实际上返回了……我只是 100% 困惑为什么它会 b/c if 语句逻辑表明它不会……

最佳答案

return 语句发生在给定 setInterval 的函数中,它不是 elementVisibilityWatcherAppear 函数的直接部分。如果提供给 setInterval 的函数返回,则在再次调用该函数之前不会发生任何特殊情况。有趣的部分发生在另一种情况下:然后函数停止被调用并且 promise 返回 resolve()

顺便说一下,您可能对使用 MutationObserver 感兴趣.

关于javascript - 这两个 promise 和我期望发生的事情之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57436383/

相关文章:

php - 创建 DOMDocument : match one certain element in a PHP-parser

javascript - 如何在 HTML 表格中添加 "lock"列?

javascript - 在 Node.js 中将数据库工作移动到子进程是一个好主意吗?

javascript - 如何从回调nodejs返回数据

javascript - 为什么这个简单的 JS promise 会返回一个 promise?

javascript - 如何使用 Recast.ai 使用 message.addReply 添加来自基于 promise 的 API 调用的结果?

PHP DOM 文档 : Get inner HTML of node

php - 如何使用 DOMDocument 替换节点的文本

javascript - 动画 chop <p> 中的多行文本

javascript - 回调还是 promise ?