设为首页
收藏本站
开启辅助访问
全部
问与答
创意
技术
酷工作
生活
交易
节点
飞墙
Follow
明白贴
工算小助手
登录
注册
飞社-令人惊奇的创意工作者社区-
›
首页
›
JavaScript
›
请教 JS 中有关 Promise 和回调函数的写法问题 ...
FSHEX=FIND+SHARE+EXPRESS
飞社-令人惊奇的创意工作者社区- 是一个关于发现分享表达的地方
现在登录
没有账号?
立即注册
推荐主题
›
油车好不好开,真的相差很大么?
›
你们做的我不满意,我不开心,年终奖全扣掉
›
政府的很多工作可以被 AI 取代
›
98 年女生逃离程序员:不想加班,我如何选
›
进口爱他美终究还是翻车了
今日热议主题
有时候真的好羡慕那些网红啊,高考 700 分
什么是“中产”?标准是什么?
阿里云真的是让人无语......
Tp-link BE 7200 无线路由器 SLAAC+RDNSS
年前的最后一波更新,提前祝大家新年快乐。
运营商的公网 IP 百年不变吗...
2026-02-10 GitHub 崩了
Github 崩掉了
mac vscode 使用⌥+⬅️或者➡️时,如何以
[自荐] 尝试做了一个“能听懂人话”的 AI
显示全部
|
最新评论
21 条回复
·
544 次点击
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 页
下一页
浏览过的版块
酷工作
程序员
问与答
返回顶部