node.js + 请求 => node.js + 蓝鸟 + 请求
node.js + request => node.js + bluebird + request
我正在尝试了解如何使用 promises 编写代码。
请检查我的代码。这样对吗?
Node.js + 请求:
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
var jsonpData = body;
var json;
try {
json = JSON.parse(jsonpData);
} catch (e) {
var startPos = jsonpData.indexOf('({');
var endPos = jsonpData.indexOf('})');
var jsonString = jsonpData.substring(startPos+1, endPos+1);
json = JSON.parse(jsonString);
}
callback(null, json);
} else {
callback(error);
}
});
Node.js + 蓝鸟 + 请求:
request.getAsync(url)
.spread(function(response, body) {return body;})
.then(JSON.parse)
.then(function(json){console.log(json)})
.catch(function(e){console.error(e)});
如何查看响应状态?我应该使用第一个例子中的 if 还是更有趣的东西?
查看状态码的一种方法:
.spread(function(response, body) {
if (response.statusCode !== 200) {
throw new Error('Unexpected status code');
}
return body;
})
您可以简单地检查 response.statusCode
是否在 spread
处理程序中不是 200 并从中抛出一个 Error
,这样 catch
处理程序就会处理它的。你可以这样实现
var request = require('bluebird').promisifyAll(require('request'), {multiArgs: true});
request.getAsync(url).spread(function (response, body) {
if (response.statusCode != 200)
throw new Error('Unsuccessful attempt. Code: ' + response.statusCode);
return JSON.parse(body);
}).then(console.log).catch(console.error);
如果你注意到,我们 return 从 spread
处理程序中解析 JSON,因为 JSON.parse
不是异步函数,所以我们没有在单独的 then
处理程序中完成。
我正在尝试了解如何使用 promises 编写代码。 请检查我的代码。这样对吗?
Node.js + 请求:
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
var jsonpData = body;
var json;
try {
json = JSON.parse(jsonpData);
} catch (e) {
var startPos = jsonpData.indexOf('({');
var endPos = jsonpData.indexOf('})');
var jsonString = jsonpData.substring(startPos+1, endPos+1);
json = JSON.parse(jsonString);
}
callback(null, json);
} else {
callback(error);
}
});
Node.js + 蓝鸟 + 请求:
request.getAsync(url)
.spread(function(response, body) {return body;})
.then(JSON.parse)
.then(function(json){console.log(json)})
.catch(function(e){console.error(e)});
如何查看响应状态?我应该使用第一个例子中的 if 还是更有趣的东西?
查看状态码的一种方法:
.spread(function(response, body) {
if (response.statusCode !== 200) {
throw new Error('Unexpected status code');
}
return body;
})
您可以简单地检查 response.statusCode
是否在 spread
处理程序中不是 200 并从中抛出一个 Error
,这样 catch
处理程序就会处理它的。你可以这样实现
var request = require('bluebird').promisifyAll(require('request'), {multiArgs: true});
request.getAsync(url).spread(function (response, body) {
if (response.statusCode != 200)
throw new Error('Unsuccessful attempt. Code: ' + response.statusCode);
return JSON.parse(body);
}).then(console.log).catch(console.error);
如果你注意到,我们 return 从 spread
处理程序中解析 JSON,因为 JSON.parse
不是异步函数,所以我们没有在单独的 then
处理程序中完成。