所以我试图使用jQuery的延迟(以及$.ajax
返回一个promise的事实)来处理一些异步代码。
这是一个快速示例,显示正在发生的事情
var update_model = function(model, resp){
model.set('id', resp.id);
m = model;
};
var print_id = function(){
console.log(m.get('id'));
};
var MyModel = Backbone.Model.extend({});
var m = new MyModel({title: 'test'});
var model_promise = m.save({author: 'me'}, {success: update_model});
$.when(model_promise).then(print_id);
问题是print_id
被称为update_model
之前,我不知道如何以相反的方式实现它。
在实际示例中,我正在尝试保存1到100个模型,我需要从这些模型中获取ID才能进入下一步。
我错过了一些基本的东西吗?
<小时/> 的修改
update_model
会被调用 - 它只是在print_id
之后发生的。另外,我尝试在done
上使用model_promise
方法,然后使用then
:
model_promise.done(update_model).then(print_id);
但是update_model
没有得到它必要的论据。
答案 0 :(得分:1)
问题是你的延迟在成功方法中解决了。要使用带有ajax方法的延迟,请使用deferred.done().then()
模式(请查看此处的“jqXHR对象”部分:http://api.jquery.com/jQuery.ajax/)。
var update_model = function(model, resp){
model.set('id', resp.id);
m = model;
};
var print_id = function(){
console.log(m.get('id'));
};
var MyModel = Backbone.Model.extend({});
var m = new MyModel({title: 'test'});
var $model_promise = m.save({author: 'me'});
$model_promise.done(update_model).then(print_id);