Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Promise.js或纯jQuery解决承诺的主干_Javascript_Jquery_Backbone.js_Promise - Fatal编程技术网

Javascript 使用Promise.js或纯jQuery解决承诺的主干

Javascript 使用Promise.js或纯jQuery解决承诺的主干,javascript,jquery,backbone.js,promise,Javascript,Jquery,Backbone.js,Promise,我必须管理一个使用Backbone.js制作的项目。该项目于2013年首次发布。现在我试图弄清楚他们以前做了什么 我发现他们经常使用libery与ReST服务器通信,如下面的示例所示 run: function () { if (this.initialAppViewMethod) { Promise.resolve(this.model.get('session').fetch()) .catch(this.showLoginView.bind(

我必须管理一个使用Backbone.js制作的项目。该项目于2013年首次发布。现在我试图弄清楚他们以前做了什么

我发现他们经常使用libery与ReST服务器通信,如下面的示例所示

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功能?

有人可能会使用Promise.js和主干,原因可能是很容易与另一个库集成,但没有代码,这只是猜测

作为:

因为jQuery的“承诺”是什么

这是我的


主干异步函数类似于在后台使用,它返回一个jqXHR对象

截至的
$.ajax()
返回的jQuery XMLHttpRequest(jqXHR)对象 jQuery1.5是浏览器原生XMLHttpRequest的超集 反对

[它]实施 Promise接口,为它们提供所有属性、方法和 承诺的行为(有关更多信息,请参阅)

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

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

那就足够了

因为jQuery“承诺”是正确的?所以,如果我理解这一点,那么只要我使用jQuery<3.0,就可以使用Promise.js,因为jQuery处理承诺并不总是正确的?@FelixFaltin仅当您使用需要符合承诺的代码时。否则,就没有理由了。好吧,jQuery 3确实解决了一些问题,但是简单的承诺仍然更容易使用。@emilebergron否,
initMainView
fetch(…).catch(…)
实现时被调用。请看我在上面的链接,也许谢谢你。目前,我在initMainView中得到一个错误,这是未知的。initMainView:function(){this.appView=new sand.ApplicationView({model:this.model});@FelixFaltin如果您有一个无法解决的新问题,请提出一个新问题。