导出和导入一个自定义承诺函数,但没有得到任何结果



如果我把所有东西都放在"scripts.js"中,它工作了,它会在控制台Array(5) [ "ok", "ok", "ok", "ok", "ok" ]中注销结果数组,但是如果我把函数放在"utils.js"并将其导入"scripts.js"使用时,我在控制台上什么也得不到。见下面代码:

utils.js

const waitToLoadImgs = (imgEls) => {
const imgElsPromise = imgEls.map((imgEl) => {
return new Promise((resolve) => {
imgEl.addEventListener("load", () => {
return resolve("ok");
});
});
});
const allImgElsLoaded = Promise.all(imgElsPromise);
return allImgElsLoaded;
};
export { waitToLoadImgs };

scripts.js

import {waitToLoadImgs} from "./utils.js";
const imgEls = [...document.querySelectorAll("img")];
const loadImgsResult = async()=>{
const result = await waitToLoadImgs(imgEls);
console.log(result); //<----- console empty, no result log out in console
}
loadImgsResult();

index . html

<body>
<img src="./assets/recycle-bin-remove-icon.svg" />
<img src="./assets/recycle-bin-remove-icon.svg" />
<img src="./assets/recycle-bin-remove-icon.svg" />
<img src="./assets/recycle-bin-remove-icon.svg" />
<img src="./assets/recycle-bin-remove-icon.svg" />
<script src="scripts.js" type="module"></script>
</body>

,但如果我把所有的js代码在一个js文件,我得到控制台的结果。为什么我没有得到任何结果,如果我把我的代码分成两个js文件?我做错了什么?

---------- 更新 ----------

我刚刚发现还有一个问题,当我把所有的代码在一个js文件和控制台注销的结果,chrome的开发工具控制台不显示结果,但firfox的开发工具控制台确实显示结果数组.....

我想可能是在您添加事件侦听器之前加载了图像。

像这样修改utils.js:

const waitToLoadImgs = (imgEls) => {
const imgElsPromise = imgEls.map((imgEl) => {
return new Promise((resolve) => {
if(imgEl.complete){ resolve("before_ok");return; }
imgEl.addEventListener("load", () => {
return resolve("ok");
});
});
});
const allImgElsLoaded = Promise.all(imgElsPromise);
return allImgElsLoaded;
};
export { waitToLoadImgs };

最新更新