我有一个现有的项目,它有很多返回承诺的异步函数。我正在添加一些缓存,以便在某些情况下异步函数将同步完成,并希望尽可能使这段代码更短/更好:
return $.Deferred(function(def) { def.resolve(); }).promise();
例如,我有一个处理大多数 AJAX 请求的数据服务类,如下所示:
function DataService() {
var self = this;
self.makeRequest = function(functionName, data) {
return $.Deferred(function(def) {
var jsonData = JSON.stringify(data);
$.ajax({
type: "POST",
url: "WebService.asmx/" + functionName,
data: jsonData,
contentType: "application/json; charset=utf-8",
dataType: "json",
error: function(xhr, status, error) {
var ex;
try {
ex = eval("(" + xhr.responseText + ")");
ex.message = ex.Message;
ex.Message = undefined;
} catch (ex2) {
ex = { message: "Invalid Response From Server:\r\n" + xhr.responseText };
}
if (ex.message == "LoginRequired") {
app.viewModels.main.loginRequired(true);
}
else {
app.showError(ex.message);
}
def.reject(ex.message);
}
});
}).promise();
}
}
然后我在另一个类中有一个函数,该函数当前总是调用 makeRequest:
self.deleteMe = function()
{
return app.dataservice.makeRequest('deleteItem');
}
我想更新 deleteMe 函数,使它不总是调用 makeRequest,而只是做一些同步工作然后返回。虽然它需要返回一个承诺,因为无论调用什么它都会期待它,但它需要是一个“已经完成/解决的承诺”。目前我正在使用上面的第一组代码来做到这一点。似乎必须有更好的方法。