Skip to content

Commit

Permalink
Async onBeforeSend (#440)
Browse files Browse the repository at this point in the history
  • Loading branch information
AlekseyMartynov committed Aug 13, 2020
1 parent 21160b3 commit f77bfa2
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 14 deletions.
49 changes: 49 additions & 0 deletions js-test/test.js
Expand Up @@ -630,6 +630,55 @@
});
});

QUnit.module("async onBeforeSend", function() {

QUnit.test("success", function(assert) {
var done = assert.async();

XHRMock.use(function(req) {
assert.equal(req.header("Authorization"), "Bearer 123")
done();
return NEVER_RESOLVE;
});

function getTokenAsync() {
return Promise.resolve("123");
}

function addAuthorizationAsync(ajaxSettings) {
return getTokenAsync().then(function(token) {
ajaxSettings.headers = {
Authorization: "Bearer " + token
};
});
}

var store = createStore({
onBeforeSend: function(op, ajaxSettings) {
return addAuthorizationAsync(ajaxSettings);
}
});

store.load();
});

QUnit.test("error", function(assert) {
var done = assert.async();

var store = createStore({
onBeforeSend: function() {
return Promise.reject("test reason");
}
});

store.load().fail(function(error) {
assert.equal(error.message, "test reason");
done();
});
});

});

QUnit.module("cache-busting", function() {

function testCacheBusting(testName, action) {
Expand Down
40 changes: 26 additions & 14 deletions js/dx.aspnet.data.js
Expand Up @@ -61,21 +61,11 @@
onAjaxError = options.onAjaxError;

function send(operation, requiresKey, ajaxSettings, customSuccessHandler) {
var d = Deferred();

if(requiresKey && !keyExpr) {
d.reject(new Error("Primary key is not specified (operation: '" + operation + "', url: '" + ajaxSettings.url + "')"));
} else {
if(operation === "load") {
ajaxSettings.cache = false;
ajaxSettings.dataType = "json";
} else {
ajaxSettings.dataType = "text";
}

if(onBeforeSend)
onBeforeSend(operation, ajaxSettings);
var d = Deferred(),
thenable,
beforeSendResult;

function sendCore() {
ajaxUtility.sendRequest(ajaxSettings).then(
function(res, textStatus, xhr) {
if(customSuccessHandler)
Expand All @@ -100,6 +90,28 @@
);
}

if(requiresKey && !keyExpr) {
d.reject(new Error("Primary key is not specified (operation: '" + operation + "', url: '" + ajaxSettings.url + "')"));
} else {
if(operation === "load") {
ajaxSettings.cache = false;
ajaxSettings.dataType = "json";
} else {
ajaxSettings.dataType = "text";
}

if(onBeforeSend) {
beforeSendResult = onBeforeSend(operation, ajaxSettings);
if(beforeSendResult && typeof beforeSendResult.then === "function")
thenable = beforeSendResult;
}

if(thenable)
thenable.then(sendCore, function(error) { d.reject(error); });
else
sendCore();
}

return d.promise();
}

Expand Down

0 comments on commit f77bfa2

Please sign in to comment.