承诺最短等待时间[已关闭]

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

我希望为我的承诺设定一个最短持续时间。

我尝试了以下代码:

const preloadImages = (selector = '[data-lg-loadImg]') => {
    return Promise.all(Array.from(document.querySelectorAll(selector)).map(el => {
        const img = new Image();
              img.src = el.getAttribute("src");
        if (img.complete)
            return Promise.resolve(img.naturalHeight !== 0);
        return new Promise(resolve => {
            img.addEventListener('load', () => resolve(true));
            img.addEventListener('error', () => resolve(false));
        });
    }),
   new Promise(resolve => {
       setTimeout( resolve => { resolve(true) }, 5000 );
    })
    )
};

preloadImages 应在所有图像加载完毕且至少 5000 毫秒结束后返回。 上面的代码不起作用。它在所有图像加载后返回,与 setTimeout() 无关。如何实现?

javascript promise
1个回答
0
投票

修改代码,使

Promises.all
接受数组:

const preloadImages = (selector = '[data-lg-loadImg]') => {
  const imagePromises = Array.from(document.querySelectorAll(selector)).map(el => {
    const img = new Image();
    img.src = el.getAttribute("src");
    if (img.complete)
      return Promise.resolve(img.naturalHeight !== 0);
    return new Promise((resolve) => {
      img.addEventListener('load', () => resolve(true));
      img.addEventListener('error', () => resolve(false));
    });
  });
  const timeoutPromise = new Promise(resolve => setTimeout(() => resolve(true), 5000));
  return Promise.all([...imagePromises, timeoutPromise]);
};
© www.soinside.com 2019 - 2024. All rights reserved.