Javascript resolve()执行,但承诺未按预期进行解析
我有这样的代码:(我把整个代码放在这里是为了不遗漏任何东西) 尽管代码到达了Javascript resolve()执行,但承诺未按预期进行解析,javascript,es6-promise,Javascript,Es6 Promise,我有这样的代码:(我把整个代码放在这里是为了不遗漏任何东西) 尽管代码到达了player.SetVar(${cover},true)代码行,我确信执行了resolve(),承诺没有解决,我看不到console.log('after resolving promise as expected!')为什么?它在其他一些情况下工作 注意:代码实际上是等待一个元素(图像)加载,然后解析承诺。可能存在两个问题,第一个问题是,如果图像尚未加载,第一个承诺不会解析,所有后续承诺都会被丢弃;第二个问题是,如果再
player.SetVar(
${cover},true)代码>代码行,我确信执行了resolve()
,承诺没有解决,我看不到console.log('after resolving promise as expected!')代码>为什么?它在其他一些情况下工作
注意:代码实际上是等待一个元素(图像)加载,然后解析承诺。可能存在两个问题,第一个问题是,如果图像尚未加载,第一个承诺不会解析,所有后续承诺都会被丢弃;第二个问题是,如果再次调用coverLoaded
,第一个承诺永远不会解决
这应该如预期的那样起作用:
功能封面已加载(封面){
返回新承诺((解决)=>{
const updateOverload=setInterval(()=>{
const coverSelector=$(`[aria label=“${cover}]”)。查找(“图像”)[0];
if(封面选择器的类型!=“未定义”){
const coverSelectorSource=coverSelector.getAttribute(“xlink:href”);
如果(getCoverWidth(coverSelectorSource)!==0){
clearInterval(更新覆盖);
设置超时(()=>{
SetVar(`${cover}`,true);
setTimeout(()=>player.SetVar(`${cover}`,false),100;
解决();
}, 100);
}
}
}, 25);
});
函数getCoverWidth(src){
常量图像=新图像();
image.src=src;
返回image.naturalWidth;
}
}
//添加SFX以覆盖入口和出口
异步函数反馈覆盖(){
等待承保(“承保B”);
log(“按预期解决承诺后!”);
}
谢谢你的回答。。。今晚我会测试这个。。。在达到预期结果之前,请不要离开我:)
let updateCoverLoaded;
function coverLoaded(cover){
clearInterval(updateCoverLoaded);
updateCoverLoaded = setInterval(() => coverLoaded(cover), 25);
const coverSelector = $(`[aria-label="${cover}"]`).find("image")[0];
return new Promise(resolve => {
if(typeof coverSelector !== "undefined"){
const coverSelectorSource = coverSelector.getAttribute("xlink:href");
if(getCoverWidth(coverSelectorSource) !== 0) {
clearInterval(updateCoverLoaded);
setTimeout(() => {
player.SetVar(`${cover}`, true);
setTimeout(() => player.SetVar(`${cover}`, false), 100);
resolve();
}, 100);
}
}
});
function getCoverWidth(src) {
const image = new Image();
image.src = src;
return image.naturalWidth;
}
}
// Add SFX to cover entrance and exit
async function feedbackCover(){
await coverLoaded('coverB');
console.log('after resoving promise as expected!');
}