gpt4 book ai didi

javascript - node.js + 请求 => node.js + bluebird + 请求

转载 作者:数据小太阳 更新时间:2023-10-29 05:51:58 28 4
gpt4 key购买 nike

我正在尝试了解如何使用 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 + bluebird + 请求:

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 处理程序中的 response.statusCode 是否不是 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);

如果你注意到,我们从 spread 处理程序返回解析后的 JSON,因为 JSON.parse 不是异步函数,所以我们不必做它在一个单独的 then 处理程序中。

关于javascript - node.js + 请求 => node.js + bluebird + 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31098009/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com