设为首页
收藏本站
开启辅助访问
全部
问与答
创意
技术
酷工作
生活
交易
资源
节点
飞墙
Follow
明白贴
报酬
登录
注册
飞社-令人惊奇的创意工作者社区-
›
首页
›
JavaScript
›
请教 JS 中有关 Promise 和回调函数的写法问题 ...
FSHEX=FIND+SHARE+EXPRESS
飞社-令人惊奇的创意工作者社区- 是一个关于发现分享表达的地方
现在登录
没有账号?
立即注册
推荐主题
›
我写了一本书:《从零开始手搓数据库(Go)》
›
为啥最近小红书疯狂推送关于红楼梦及明朝相
›
儿子去外地见网友,有什么定位软件推荐?
›
跟大家讲个笑话 - 关于面基失败
›
京东的价格保护都变味了
今日热议主题
被 Windows 台式机折腾了一个周末,问题究
[更新] 我把 100%本地运行的刷算法题项目做
netbird 宣告了网段就无法局域网走 P2P 了
[教程]关于 CCS 独服帐号注册、闪购及后续
现在注册谷歌新账号还是很简单啊
如果你现在中了大乐透一等奖,你会?
收个美区 loon 兑换码,有的带价
出台全套箱说的 MBP M1Pro 10+14 32GB+1TB
求解,为什么部署的 tailscale 的 derp 服
关于 QQ 聊天记录找回的疑难杂症,求大佬指
显示全部
|
最新评论
21 条回复
·
477 次点击
11#
xiangyuecn
初学
2024-6-13 09:40:28
没错,是你理解的这样。很简单就是 onload 被第二个给覆盖了
new Promise() 是同步方法,没错 是同步🐶
12#
jguo
小成
2024-6-13 09:48:34
你说的这一大串跟 promise 没什么关系。element.onload=handler 这种写法早就不推荐了,应该用 addEventListener 。
13#
lolizeppelin
小成
2024-6-13 09:52:02
别折腾了 用 rx !
14#
monokuma88
小成
2024-6-13 10:47:07
一个不负责任的优化方案(以能用就行为原则):
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"); // 返回回调函数的结果
};
});
};
15#
abc1310054026
小成
2024-6-13 14:05:51
其实关键在于不要出现无法“resolve”的 Promise 对象。
在你这种场景下就是尽量使用 addEventListener 而不是 onXXX 。因为 onXXX 容易不小心被覆盖。
16#
wuzzispacelake
小成
2024-6-13 14:12:26
这就是单纯的 onload 只会执行一次而已,跟你的 Promise 也没什么关系,虽然这么写很奇葩就是了
17#
lmshl
小成
2024-6-13 17:36:47
```
import { fromEvent } from 'rxjs';
const clicks = fromEvent(img, 'onload');
clicks.subscribe(x => { <你的业务逻辑> });
```
不要自作聪明发明那些不可维护的代码,你能想得到的场景,早已有无数前辈替你趟过坑。
等你哪天觉得 “RxJS 不过如此,我还有个更好的想法” 的时候,再发明也不迟(顺便发几篇论文)
18#
amlee
小成
2024-6-13 17:51:06
真别 rxjs 一直说了,原生 api 就有解决方案,就是 addeventlister 添加事件触发函数,防止重复绑定,建议读读这篇
https://zh.javascript.info/introduction-browser-events#addeventlistener
19#
enjoyCoding
小成
2024-6-13 18:12:53
这种带有副作用的函数(绑了时间没有解绑)调一次可以, 调两次不行. 因为元素是一个 onload 时间只会在第一次触发, 甚至如果不立刻调用都不会触发. 正常的操作应该写成无副作用的函数, 怎么改成无副作用的函数 每次都新建一个插入 body, 绑定有 addEvent 用完了解绑, 删除元素
20#
jerry4718
小成
2024-6-14 00:07:50
都是说的什么啊,问题明明出在 onload 被覆盖上面啊
下一页 »
1
2
3
/ 3 页
下一页
浏览过的版块
obsidian
酷工作
职场话题
Serv00
大学
Mac mini
程序员
iPhone
Java
返回顶部