返回介绍

与其他库的兼容性

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

JavaScript Promise 中的 API 会把所有包含 then 方法的对象看做“类 Promise”(术语上我们称之为 thenable)对象。那么,当你使用的类库返回 Q Promise 时,一点也不用担心,它会同新的 JavaScript Promise 完美融合。

但需要注意的是,前文介绍了 jQuery 中 Deferred 对象的问题,这让人非常扫兴。不过幸运的是,我们可以将它们转换成标准的 Promise,而且最好当它们一出现的时候就进行转换:

var jsPromise = Promise.resolve($.ajax('/whatever.json'));

在这里 jQuery 的$.ajax 返回了一个 Deferred 对象。因为它具有“then”方法,所以我们可以使用 Promise.resolve 方法将它转换成 JavaScript Promise。但是,有些时候 Deferred 对象会给它的回调函数传递多个参数,如:

var jqDeferred = $.ajax('/whatever.json');

jqDeferred.then(function(response, statusText, xhrObj) {
  // ...
}, function(xhrObj, textStatus, err) {
  // ...
});

JavaScript Promise 只会保留第一个参数,其他参数均被忽略:

jsPromise.then(function(response) {
  // ...
}, function(xhrObj) {
  // ...
});

通常情况下这已经能满足需求了,或者至少能让你实现自己的想法。同时,另一个需要关注的问题是,jQuery 并不会给请求失败的回调函数传递 Error 对象。

发布评论

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