请教 JS 中有关 Promise 和回调函数的写法问题

查看 272|回复 23
cxe2v   
@ashong 你搞错了,先绑定两次,再执行的 onload 回调,建议复习一下事件循环机制和异步原理
xiangyuecn   
没错,是你理解的这样。很简单就是 onload 被第二个给覆盖了
new Promise() 是同步方法,没错 是同步🐶
jguo   
你说的这一大串跟 promise 没什么关系。element.onload=handler 这种写法早就不推荐了,应该用 addEventListener 。
lolizeppelin   
别折腾了 用 rx !
wuoty
OP
  
@Kaciras
@jazzg62
@RedNax
试了一下,确实是这样的:
```js
for (let i = 0; i  {
console.log("Async function executed");
});
}
```
用循环去调用函数,会在覆盖时自动触发次要垃圾回收
!()[

]
wuoty
OP
  
@xiaoming1992
@jguo
是的,看到网上有人教了用 onload 的这种写法,所以想看看这种写法会导致一些什么潜在的问题
monokuma88   
一个不负责任的优化方案(以能用就行为原则):
const message = () => {
return new Promise((resolve, reject) => {
if (img.complete) {
resolve("Image loaded successfully");
return;
}
const prevOnload = img.onload;
img.onload = () => {
if (prevOnload) {
prevOnload();
}
resolve("Image loaded successfully"); // 返回回调函数的结果
};
});
};
ashong   
@cxe2v 确实👍
abc1310054026   
其实关键在于不要出现无法“resolve”的 Promise 对象。
在你这种场景下就是尽量使用 addEventListener 而不是 onXXX 。因为 onXXX 容易不小心被覆盖。
wuzzispacelake   
这就是单纯的 onload 只会执行一次而已,跟你的 Promise 也没什么关系,虽然这么写很奇葩就是了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部