代码之家  ›  专栏  ›  技术社区  ›  Fifi

在JavaScript中等待promise和事件侦听器

  •  1
  • Fifi  · 技术社区  · 2 年前

    这可能是一个简单的问题,但我不知道该怎么做。

    加载页面时我需要运行代码 一个承诺得到了解决。由于承诺有点长,我想先开始承诺。这是我的代码:

    // Wait for the promise
    myLongFunction().then(() => {
                
        // Wait for the page to be load and rendered
        window.addEventListener('load', (event) => {
    
            // I do awesome stuff here
        });
    });
    

    有时,当 myLongFunction() 太长,DOM已加载并且事件已被触发。我从不做我的 很棒的东西 .

    以下始终有效:

    // Wait for the page to be load and rendered
    window.addEventListener('load', (event) => {
    
        // Wait for the promise
        myLongFunction().then(() => {
    
            // I do awesome stuff here
        });  
    });
    

    我更喜欢第一种选择,因为 myLongFunction() 在加载DOM时正在运行。有没有办法正确地等待这两个事件?

    1 回复  |  直到 2 年前
        1
  •  4
  •   Quentin    2 年前
    • 在加载事件激发时进行promise解析。
    • 使用 Promise.all 等待他们两个。

    例如

    
    const loadPromise = new Promise((resolve) => {
        addEventListener('load', resolve);
    });
    
    const otherPromise = myLongFunction();
    
    Promise.all([loadPromise, otherPromise]).then((results => {
        // Both promises have now resolved
    });