使用Promise.js或纯jQuery的骨干来解决承诺

时间:2016-11-23 20:19:09

标签: javascript jquery backbone.js promise

我要管理一个用Backbone.js制作的项目。该项目于2013年首次发布。目前我试图找出他们之前做过的事情。

我发现他们经常使用Promise.js libery与ReST-Server进行通信,如下面的示例

run: function () {
    if (this.initialAppViewMethod) {
        Promise.resolve(this.model.get('session').fetch())
            .catch(this.showLoginView.bind(this))
            .then(this.initMainView.bind(this));
    }
},

我一直想知道为什么他们使用Promise.js而不是已经使用过的jquery.js liberay来做承诺是否有某种原因?

顺便说一句:如何将此脚本转换为使用纯jQuery功能?

1 个答案:

答案 0 :(得分:1)

有人可能会使用Backbone的Promise.js可能很容易与另一个lib集成,但没有代码,这只是推测。

作为mentionned by Bergi

  

因为jQuery“promises”是not pure

这是fixed in jQuery 3

fetch之类的骨干异步函数在后台使用jQuery's ajax,它返回一个jqXHR对象。

  

$.ajax()返回的jQuery XMLHttpRequest(jqXHR)对象   jQuery 1.5是浏览器的原生XMLHttpRequest的超集   对象

     

[它]实现了   Promise接口,为它们提供所有属性,方法和   承诺的行为(有关详细信息,请参阅Deferred object)。

此外,您可以直接使用Backbone异步函数回调和选项:

run: function () {
    if (this.initialAppViewMethod) {
        this.model.get('session').fetch({
            context: this,
            error: this.showLoginView,
            success: this.initMainView
        });
    }
},

这就够了。