diff --git a/lib/index.js b/lib/index.js index 7f19aa4cd3..0a2e4386d8 100644 --- a/lib/index.js +++ b/lib/index.js @@ -414,9 +414,12 @@ var Client = module.exports = function(config) { }; function getPage(link, which, headers, callback) { + var self = this; var url = getPageLinks(link)[which]; - if (!url) - return callback(new error.NotFound("No " + which + " page found")); + if (!url) { + var urlErr = new error.NotFound("No " + which + " page found"); + return self.Promise && !callback ? self.Promise.reject(urlErr) : callback(urlErr); + } var parsedUrl = Url.parse(url, true); @@ -430,38 +433,24 @@ var Client = module.exports = function(config) { params: parsedUrl.query }; - var self = this; - this.httpSend(msg, block, function(err, res) { - if (err) - return self.sendError(err, null, parsedUrl.query, callback); - - var ret; - try { - ret = res.data; - var contentType = res.headers["content-type"]; - if (contentType && contentType.indexOf("application/json") !== -1) - ret = JSON.parse(ret); - } - catch (ex) { - if (callback) - callback(new error.InternalServerError(ex.message), res); - return; - } - - if (!ret) - ret = {}; - if (typeof ret == "object") { - if (!ret.meta) - ret.meta = {}; - self.responseHeaders.forEach(function(header) { - if (res.headers[header]) - ret.meta[header] = res.headers[header]; + if (!callback) { + if (self.Promise) { + return new self.Promise(function(resolve,reject) { + var cb = function(err, obj) { + if (err) { + reject(err); + } else { + resolve(obj); + } + }; + self.handler(msg, JSON.parse(JSON.stringify(block)), cb); }); + } else { + throw new Error('neither a callback or global promise implementation was provided'); } - - if (callback) - callback(null, ret); - }); + } else { + self.handler(msg, JSON.parse(JSON.stringify(block)), callback); + } } /** @@ -477,7 +466,7 @@ var Client = module.exports = function(config) { callback = headers; headers = null; } - getPage.call(this, link, "next", headers, callback); + return getPage.call(this, link, "next", headers, callback); }; /** @@ -493,7 +482,7 @@ var Client = module.exports = function(config) { callback = headers; headers = null; } - getPage.call(this, link, "prev", headers, callback); + return getPage.call(this, link, "prev", headers, callback); }; /** @@ -509,7 +498,7 @@ var Client = module.exports = function(config) { callback = headers; headers = null; } - getPage.call(this, link, "last", headers, callback); + return getPage.call(this, link, "last", headers, callback); }; /** @@ -525,7 +514,7 @@ var Client = module.exports = function(config) { callback = headers; headers = null; } - getPage.call(this, link, "first", headers, callback); + return getPage.call(this, link, "first", headers, callback); }; function getRequestFormat(hasBody, block) {