设为首页
收藏本站
开启辅助访问
全部
问与答
创意
技术
酷工作
生活
交易
资源
节点
飞墙
Follow
明白贴
报酬
登录
注册
飞社-令人惊奇的创意工作者社区-
›
首页
›
JavaScript
›
请教 JS 中有关 Promise 和回调函数的写法问题 ...
FSHEX=FIND+SHARE+EXPRESS
飞社-令人惊奇的创意工作者社区- 是一个关于发现分享表达的地方
现在登录
没有账号?
立即注册
推荐主题
›
各位大佬,建议今年买房么
›
程序员 35 岁被优化真的天经地义
›
有个疑问,为啥游戏一定要上架 steam?
›
证券低佣开户万 0.854 免 5, 评论抽奖送五
›
你们代码编辑器会自动保存吗
今日热议主题
国内 Claude Code 镜像站,现在哪家比较好
解决 ColorOS 使用第三方桌面作为默认桌面
工作不太忙的时候,你们都怎么偷偷学习的?
大家平均每天戴耳机多久?
各位 16:9 的 24 寸竖屏显示器平时都用来干
收一个二手游戏本电脑,预算 5000。顺便出
Apple Watch 的心律不齐通知和心房颤动通知
做了一个本地化笔记应用: NoteWizard
重发:出售自用家用 SUV 星越 L
[出] 北京地区出全新未拆封小米 watch s4
显示全部
|
最新评论
21 条回复
·
473 次点击
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 页
下一页
浏览过的版块
Android
Docker
人工智能
Go 编程语言
RSS
OpenAI
Bing
路由器
Steam
软件
返回顶部