Deferred object
The Deferred object, introduced in jQuery 1.5, is a chainable utility object created by calling the jQuery.Deferred() method. It can register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function.
jQuery.Deferred( [beforeStart ] )
beforeStart
Type: Function( Deferred deferred )
A function that is called just before the constructor returns.
A deferred object contains a promise object. Via the promise object you can specify what is to happen when the unit of work completes. You do so by setting callback functions on the promise object. I will show you how all that works later in this text.
The jQuery.Deferred()
factory creates a new deferred object.
A Deferred object starts in the pending state. Any callbacks added to the object with deferred.then()
, deferred.always()
, deferred.done()
, or deferred.fail()
are queued to be executed later. Calling deferred.resolve()
or deferred.resolveWith()
transitions the Deferred into the resolved state and immediately executes any doneCallbacks that are set. Calling deferred.reject()
or deferred.rejectWith()
transitions the Deferred into the rejected state and immediately executes any failCallbacks that are set. Once the object has entered the resolved or rejected state, it stays in that state. Callbacks can still be added to the resolved or rejected Deferred — they will execute immediately.
Click here to see more
Few other useful details click to see it.
You should try following,
get_partners: function(){
var self = this;
var partners_def = new $.Deferred();
var model = new instance.web.Model('res.partner');
var partners_arr = [];
self.partners = [];
model.query(['id', 'name']).filter([['customer', '=', 'True']]).limit(1000).all().then(function(partners){
_.each(partners, function(partner){
partners_arr.push(partner);
});
if(partners_arr.length > 0)
partners_def.reject();
else{
self.partners = partners_arr;
partners_def.resolve(partners_arr);
}
return partners_def;
});
},