具有javascript承诺的多个onload事件
我正在尝试将多个承诺链接到具有javascript承诺的多个onload事件,javascript,promise,Javascript,Promise,我正在尝试将多个承诺链接到Promise.all([…])中,并在onload回调中激活每个承诺。我的代码: var-stylesheetpromissions=[] //样式版本 for(iframe.contentWindow.document.querySelectorAll(“link[rel=stylesheet]”)的变量链接){ //var linkPromise=新承诺((解析)=>resolve()) var linkPromise=()=>新承诺((解析)=>resolve(
Promise.all([…])
中,并在onload
回调中激活每个承诺。我的代码:
var-stylesheetpromissions=[]
//样式版本
for(iframe.contentWindow.document.querySelectorAll(“link[rel=stylesheet]”)的变量链接){
//var linkPromise=新承诺((解析)=>resolve())
var linkPromise=()=>新承诺((解析)=>resolve())
样式表Promises.push(linkPromise)
link.onload=函数(){
console.log('加载了样式表')
//链接承诺()
}
link.href=link.href.replace(/\?.*$/,“?v=4”)
}
所有(样式表承诺)。然后((值)=>{
console.log('加载了所有样式表')
});
上面的代码将样式表的版本附加到iframe中,并确定何时将所有样式表加载到Promise.all
我的代码中的问题是Promise.all
正在激活,而没有在onload事件回调中调用linkPromise()
。将在“已加载样式表”之前记录“已加载所有样式表”
如何正确链接承诺并在
onload
事件中激活它们,并使用Promise.all
回调来确定何时解决所有承诺?您可以尝试以下方法:
iframe.contentWindow.document.queryselectoral(“link[rel=stylesheet]”)。forEach(link=>{
//更改为arrow函数以修复闭包范围问题
link.href=link.href.replace(/\?.*$/,“?v=4”);
样式表承诺。推送(新承诺((解决,拒绝)=>{
//仅在加载样式表时解析承诺
link.addEventListener('load',resolve)
}));
}
为什么承诺。所有的调用任何东西?它需要承诺数组。而不是返回承诺的函数数组。啊,我错过了@VLAZ