x-http-client
Version:
An http client to simplify sending requests (HTTP & JSONP) in the browser.
67 lines (62 loc) • 2.37 kB
JavaScript
var isFunction = require('x-common-utils/isFunction');
var HttpResponseError = require('../class/HttpResponseError');
var JSONPResponseError = require('../class/JSONPResponseError');
var constants = require('../shared/constants');
var HTTP_REQUEST = constants.HTTP_REQUEST;
/**
* Fire the callbacks.
*
* @param {string|null} code If there is an error, `code` should be a string. If there is no error, `code` is `null`.
* @param {HttpResponse|JSONPResponse} response The response instance.
*/
function fireCallbacks(code, response) {
var request = response.request;
var requestType = request.requestType;
var options = request.options;
var onsuccess = request.onsuccess;
var onerror = request.onerror;
var shouldCallErrorCallback = options.shouldCallErrorCallback;
var shouldCallSuccessCallback = options.shouldCallSuccessCallback;
var transformError = options.transformError;
var transformResponse = options.transformResponse;
var error = null;
var callErrorCallback = true;
var callSuccessCallback = true;
var transformedError = null;
var transformedResponse = null;
if (code) {
if (requestType === HTTP_REQUEST) {
error = new HttpResponseError(code, request);
} else {
error = new JSONPResponseError(code, request);
}
if (isFunction(transformError)) {
transformedError = transformError(requestType, error);
} else {
transformedError = error;
}
if (isFunction(shouldCallErrorCallback)) {
callErrorCallback = shouldCallErrorCallback(requestType, transformedError, error);
}
if (callErrorCallback) {
if (isFunction(onerror)) {
onerror(transformedError);
}
}
} else {
if (isFunction(transformResponse)) {
transformedResponse = transformResponse(requestType, response);
} else {
transformedResponse = response;
}
if (isFunction(shouldCallSuccessCallback)) {
callSuccessCallback = shouldCallSuccessCallback(requestType, transformedResponse, response);
}
if (callSuccessCallback) {
if (isFunction(onsuccess)) {
onsuccess(transformedResponse);
}
}
}
}
module.exports = fireCallbacks;