返回介绍

事件机制并不是万能的

发布于 2025-04-26 18:09:29 字数 961 浏览 0 评论 0 收藏

事件机制善于处理在同一个对象上反复发生的事情,如 keyup、touchstart 等。在使用这些事件时,你不需要关心绑定监听器前发生了什么事情。但是,当遇到异步请求成功/失败的场景时,你可能更喜欢下面的代码:

img1.callThisIfLoadedOrWhenLoaded(function() {
  // 加载成功


}).orIfFailedCallThis(function() {
  // 加载失败


});
// and…


whenAllTheseHaveLoaded([img1, img2]).callThis(function() {
  // 全部加载成功


}).orIfSomeFailedCallThis(function() {
  // 一个或多个加载失败


});

这就是 Promise,代码中我们使用了更合适的命名来帮助理解。如果 HTML 中的 image 元素有个可以返回 Promise 的“ready”方法的话,我们就可以像下面这样来写:

img1.ready().then(function() {
  // 加载成功


}, function() {
  // 加载失败


});

// 以及

...
Promise.all([img1.ready(), img2.ready()]).then(function() {
  // 全部加载成功


}, function() {
  // 一个或多个加载失败


});

基本上 Promise 与事件监听还是很相似的,除了以下几点:

- 一个 Promise 只能成功或者失败一次。它不能进行从成功到失败的状态转换,反之亦然。

- 如果在一个 Promise 成功或者失败后添加了相应的回调函数,那么该回调还是会被立即执行,尽管相关事件早已发生。

这些特性非常适合处理异步请求成功/失败的场景,因为你不需要花太大精力去关心相关状态改变的确切时间点,从而可以花更多时间去处理状态更改后的业务逻辑。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。