I am having an issue with a class level attribute not being set on object creation. I am using a type of function based class (non ES6) for encapsulating an HTTP request:
/** HttpRequest
*/
function HttpRequest (url) {
// shell
this.results = [];
// base URL
var baseUrl = url;
// new promise
var promiseRequest = new Promise(function(resolve, reject) {
// new request
HttpRequest.prototype.requestor(baseUrl, resolve, reject);
});
// on promise resolve
promiseRequest.then(
/** success
*/
function success(r) {
HttpRequest.prototype.addResults(r);
},
/** error
*/
function error(e) {
console.log("http-request.utility.js: Promise issue");
}
);
}
/** HttpRequest.requestor()
* @param string - API url
* @param promise callback - resolve
* @param promise callback - reject
*/
HttpRequest.prototype.requestor = function (apiRequest, resolve, reject) {
// new page object
var request = new XMLHttpRequest();
// event
request.onreadystatechange = function () {
if (request.readyState == XMLHttpRequest.DONE) {
if (request.status == 200) {
// successful request
resolve(JSON.parse(request.response));
}
else if (request.status == 400) {
console.log("http-request.utility.js: Error on API request");
}
else {
console.log("http-request.utility.js: Error on API request");
}
}
};
// iniatilize
request.open("GET", apiRequest, true);
request.setRequestHeader("Accept", "application/json; odata=verbose");
request.send();
}
HttpRequest.prototype.addResults = function (r) {
this.results = r;
console.log('ok');
}
When I create an object, and initialize
var p = "api_url";
var ob = new HttpRequest(p);
Everything works as expected on debugging and it appears the array is being updated. However, checking the object attribute returns an empty array:
ob.results # []