【问题标题】:Backbone with Promise.js or pure jQuery to resolve promises使用 Promise.js 或纯 jQuery 解决 Promise 的 Backbone
【发布时间】:2016-11-24 04:43:11
【问题描述】:

我要管理一个使用 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 功能?

【问题讨论】:

  • 因为 jQuery 的“承诺”是 not pure?
  • 所以如果我理解这一点是正确的,只要我使用 jQuery
  • @FelixFaltin 仅当您使用需要兼容承诺的代码时。否则,没有任何理由。
  • 嗯,jQuery 3 确实修复了 一些 问题,但使用简单的 Promise 仍然更容易。
  • @EmileBergeron 不,只要fetch(…).catch(…) 满足,就会调用initMainView。另见the question我在上面链接,也许this

标签: javascript jquery backbone.js promise


【解决方案1】:

有人可能将 Promise.js 与 Backbone 一起使用的原因可能是为了与另一个库轻松集成,但没有代码,这只是猜测。

作为mentionned by Bergi:

因为 jQuery 的“承诺”是 not pure?

这是fixed in jQuery 3


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

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

[它] 实现 Promise 接口,给他们所有的属性、方法和 Promise 的行为(请参阅Deferred object 了解更多信息)。

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

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

这就够了。

【讨论】:

  • 谢谢。目前我在 initMainView 中收到一个错误,这是未知的。 initMainView: function() { this.appView = new sand.ApplicationView({ model: this.model });
  • @FelixFaltin 如果您有无法解决的新问题,请提出新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 2017-06-21
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多