Backbone JS Promises在模型上设置属性之前解析

Backbone JS Promises resolve before properties are set on model

本文关键字:属性 设置 JS Promises 模型 Backbone      更新时间:2023-09-26

使用主干模型,假设它从服务器获取一些附加属性(如"FirstName"answers"LastName"),我有如下内容:

var myModel = new Backbone.Model({ id: 10 });
var myOtherModel = new Backbone.Model({ id: 20 });
$.when(myModel.fetch(), myOtherModel.fetch()).done(function () {
    console.log(myModel.toJSON());
});

输出:

{id:10}

片刻后的输出:

{id:10,名字:"Joe",姓氏:"Schmo"}

Backbone的promise似乎有缺陷,因为返回的jqXHR对象有一个在主干完成自己的过程之前解决的promise。

是这样吗?是否必须采取其他措施来确保fetch()返回的承诺在Backbone的所有set完成之前不会得到解决,或者至少在我的附加处理程序之前发生set

发现问题。

我正在获取的模型覆盖了Backbone.model.sync.

    sync: function (method, model, options) {
                    // Some stuff
        Backbone.sync(method, model, options); // missing return
    }

因为它没有return Backbone.sync(),所以承诺立即得到了解决。如果不是因为$.when()包装了fetch()调用,我会发现这一点,它会默默地接受任何旧的东西,即使它不是承诺,并立即将其视为已解决。

为什么不在fetch调用中使用"success"回调?

myModel.fetch({
  success: function () {
    console.log(myModel.toJSON());
  }
});