设为首页
收藏本站
开启辅助访问
全部
问与答
创意
技术
酷工作
生活
交易
资源
节点
飞墙
Follow
明白贴
报酬
工算小助手
登录
注册
飞社-令人惊奇的创意工作者社区-
›
首页
›
JavaScript
›
请教 JS 中有关 Promise 和回调函数的写法问题 ...
FSHEX=FIND+SHARE+EXPRESS
飞社-令人惊奇的创意工作者社区- 是一个关于发现分享表达的地方
现在登录
没有账号?
立即注册
推荐主题
›
没想明白,现在小朋友学新技术起手式是在 B
›
元宝开始撒钱了,大家捡个午饭钱吧
›
飞牛 NAS 的信任危机, 0Day 漏洞导致用户
›
小红书怎么找到一个曾经聊过天的账号?
›
2026 年了,前端开发还能学点啥
今日热议主题
讨论关于 nas 的系统选择有没有好的建议
OPPO 相册云服务着实把我恶心了一把
跟风 moltbook,写了一个让 AI 相互发布悬
做了一个 AI 涂色页小工具,想听听大家的想
AI 让新手开发者变懒了吗?
IB 被限制后,众安的 LV2 也是一个不错的选
创业真的很难,很烧钱。
独立开发一个月,我把浏览器‘挂’在了屏幕
飞牛今天凌晨发布 1.1.18 更新,然后我发现
PayPal 怎么确定 ID 区域呢?登录一下就被
显示全部
|
最新评论
21 条回复
·
537 次点击
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 页
下一页
浏览过的版块
互联网
返回顶部