Skip to content

Commit b29c091

Browse files
jamsinclairkaizensoze
authored andcommitted
Episode VI: Return of the Promise PRs (getPage Promise support) (#434)
* add promise url error handling to getPage function * add promise support to getPage function * ensure all getPage methods return potential promise
1 parent 5a003fd commit b29c091

File tree

1 file changed

+25
-36
lines changed

1 file changed

+25
-36
lines changed

lib/index.js

Lines changed: 25 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -414,9 +414,12 @@ var Client = module.exports = function(config) {
414414
};
415415

416416
function getPage(link, which, headers, callback) {
417+
var self = this;
417418
var url = getPageLinks(link)[which];
418-
if (!url)
419-
return callback(new error.NotFound("No " + which + " page found"));
419+
if (!url) {
420+
var urlErr = new error.NotFound("No " + which + " page found");
421+
return self.Promise && !callback ? self.Promise.reject(urlErr) : callback(urlErr);
422+
}
420423

421424
var parsedUrl = Url.parse(url, true);
422425

@@ -430,38 +433,24 @@ var Client = module.exports = function(config) {
430433
params: parsedUrl.query
431434
};
432435

433-
var self = this;
434-
this.httpSend(msg, block, function(err, res) {
435-
if (err)
436-
return self.sendError(err, null, parsedUrl.query, callback);
437-
438-
var ret;
439-
try {
440-
ret = res.data;
441-
var contentType = res.headers["content-type"];
442-
if (contentType && contentType.indexOf("application/json") !== -1)
443-
ret = JSON.parse(ret);
444-
}
445-
catch (ex) {
446-
if (callback)
447-
callback(new error.InternalServerError(ex.message), res);
448-
return;
449-
}
450-
451-
if (!ret)
452-
ret = {};
453-
if (typeof ret == "object") {
454-
if (!ret.meta)
455-
ret.meta = {};
456-
self.responseHeaders.forEach(function(header) {
457-
if (res.headers[header])
458-
ret.meta[header] = res.headers[header];
436+
if (!callback) {
437+
if (self.Promise) {
438+
return new self.Promise(function(resolve,reject) {
439+
var cb = function(err, obj) {
440+
if (err) {
441+
reject(err);
442+
} else {
443+
resolve(obj);
444+
}
445+
};
446+
self.handler(msg, JSON.parse(JSON.stringify(block)), cb);
459447
});
448+
} else {
449+
throw new Error('neither a callback or global promise implementation was provided');
460450
}
461-
462-
if (callback)
463-
callback(null, ret);
464-
});
451+
} else {
452+
self.handler(msg, JSON.parse(JSON.stringify(block)), callback);
453+
}
465454
}
466455

467456
/**
@@ -477,7 +466,7 @@ var Client = module.exports = function(config) {
477466
callback = headers;
478467
headers = null;
479468
}
480-
getPage.call(this, link, "next", headers, callback);
469+
return getPage.call(this, link, "next", headers, callback);
481470
};
482471

483472
/**
@@ -493,7 +482,7 @@ var Client = module.exports = function(config) {
493482
callback = headers;
494483
headers = null;
495484
}
496-
getPage.call(this, link, "prev", headers, callback);
485+
return getPage.call(this, link, "prev", headers, callback);
497486
};
498487

499488
/**
@@ -509,7 +498,7 @@ var Client = module.exports = function(config) {
509498
callback = headers;
510499
headers = null;
511500
}
512-
getPage.call(this, link, "last", headers, callback);
501+
return getPage.call(this, link, "last", headers, callback);
513502
};
514503

515504
/**
@@ -525,7 +514,7 @@ var Client = module.exports = function(config) {
525514
callback = headers;
526515
headers = null;
527516
}
528-
getPage.call(this, link, "first", headers, callback);
517+
return getPage.call(this, link, "first", headers, callback);
529518
};
530519

531520
function getRequestFormat(hasBody, block) {

0 commit comments

Comments
 (0)