[imp] Modifier rpc calls to handle correctly the promises.

bzr revid: nicolas.vanhoren@openerp.com-20110629100109-m9z598dy2rqy8pn3
This commit is contained in:
niv-openerp
2011-06-29 12:01:09 +02:00
parent 46c6db5928
commit 55fb19b0f7
2 changed files with 27 additions and 15 deletions
+25 -14
View File
@@ -361,12 +361,21 @@ openerp.base.Session = openerp.base.BasicController.extend( /** @lends openerp.b
error_callback = typeof(error_callback) != "undefined" ? error_callback : this.on_rpc_error;
// Call using the rpc_mode
return this.rpc_ajax(url, {
var deferred = $.Deferred();
this.rpc_ajax(url, {
jsonrpc: "2.0",
method: "call",
params: params,
id:null
}, success_callback, error_callback);
}).then(function () {deferred.resolve.apply(deferred, arguments);},
function(error) {deferred.reject(error, $.Event());});
return deferred.then(success_callback, function(error, event) {
deferred.fail(function(error2, event2) {
if (!event.isDefaultPrevented()) {
error_callback(error2, event2);
}
});
}).promise();
},
/**
* Raw JSON-RPC call
@@ -388,33 +397,35 @@ openerp.base.Session = openerp.base.BasicController.extend( /** @lends openerp.b
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify(payload),
processData: false,
success: function(response, textStatus, jqXHR) {
processData: false
}, url);
var deferred = $.Deferred();
$.ajax(ajax).done(function(response, textStatus, jqXHR) {
self.on_rpc_response();
if (response.error) {
if (response.error.data.type == "session_invalid") {
self.uid = false;
self.on_session_invalid(function() {
self.rpc(url, payload.params, success_callback, error_callback);
self.rpc(url, payload.params,
function() {deferred.resolve.apply(deferred, arguments);},
function() {deferred.reject.apply(deferred, arguments);});
});
} else {
error_callback(response.error);
deferred.reject(response.error);
}
} else if (success_callback) {
success_callback(response["result"], textStatus, jqXHR);
} else {
deferred.resolve(response["result"], textStatus, jqXHR);
}
},
error: function(jqXHR, textStatus, errorThrown) {
}).fail(function(jqXHR, textStatus, errorThrown) {
self.on_rpc_response();
var error = {
code: -32098,
message: "XmlHttpRequestError " + errorThrown,
data: {type: "xhr"+textStatus, debug: jqXHR.responseText, objects: [jqXHR, errorThrown] }
};
error_callback(error);
}
}, url);
return $.ajax(ajax);
deferred.reject(error);
});
return deferred.promise().then(success_callback, error_callback);
},
on_rpc_request: function() {
},
+2 -1
View File
@@ -1267,7 +1267,8 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
var dataset = new openerp.base.DataSetStatic(this.session, this.field.relation, build_relation_context(self));
dataset.name_create(name, function(data) {
self._change_int_ext_value(data.result);
}).fail(function() {
}).fail(function(error, event) {
event.preventDefault();
self._change_int_value(null);
self._search_create_popup("form", undefined, {"default_name": name});
});