javascript - 使用 javascript Promise 的多个 onload 事件
问题描述
我正在尝试将多个承诺链接到回调Promise.all([...])
中并激活每个承诺。onload
我的代码:
var styleSheetPromises = []
// styles version
for (var link of iframe.contentWindow.document.querySelectorAll("link[rel=stylesheet]")) {
//var linkPromise = new Promise((resolve) => resolve())
var linkPromise = () => new Promise((resolve) => resolve())
styleSheetPromises.push(linkPromise)
link.onload = function () {
console.log('stylesheet loaded')
//linkPromise()
}
link.href = link.href.replace(/\?.*|$/, "?v=4")
}
Promise.all(styleSheetPromises).then((values) => {
console.log('All stylesheets are loaded')
});
上面的代码在 iframe 中附加样式表的版本,并确定所有样式表何时加载到Promise.all
.
我的代码中的问题是在没有调用onload 事件回调的Promise.all
情况下激活 。linkPromise()
将在“加载样式表”之前记录“加载所有样式表”。
如何正确链接 Promises 并在onload
事件中激活它们并使用Promise.all
回调来确定所有 Promise 何时解决?
解决方案
你可以尝试这样的事情:
iframe.contentWindow.document.querySelectorAll("link[rel=stylesheet]")).forEach(link=> {
// change to arrow function to fix closure scoping issues
link.href = link.href.replace(/\?.*|$/, "?v=4");
styleSheetPromises.push(new Promise((resolve, reject)=>{
// Only resolve the promise when the stylesheet is loaded
link.addEventListener('load', resolve)
}));
}
推荐阅读
- c# - MVC中调用并返回SQL函数值
- json - 如何将相同但具有不同值的 JSON 对象反序列化为 java 类
- encoding - 将我的默认编码(Java、Spring)切换为 UTF32 会减慢我的软件速度吗?
- php - 使用 volley stringreuqest 时未发送 POST 数据
- intellij-idea - 在 Intellij Idea 中找不到符号“var”
- angular - 将 mat-radio-group 绑定到可为空的布尔值的正确方法?
- python - 如何在“pack”方法(tkinter 库)中设置“in”属性?
- python - 如何让 Seldon Sklearn 服务器与 GKE 的 Google Cloud Storage 一起使用
- angular - 将值“C:\fakepath\some_image.jpg”转换为类型“System.Collections.Generic.List`1[Microsoft.AspNetCore.Http.IFormFile]”时出错。路径“照片”
- c# - 为包含复杂对象列表的复杂对象制作编辑器表单