gpt4 book ai didi

javascript - 如何在 nodejs 中使用 https.request 延迟

转载 作者:行者123 更新时间:2023-11-29 22:00:28 24 4
gpt4 key购买 nike

我使用 github 在我的 Node 应用程序中进行身份验证。我构建了以下代码:

var req = request(postOptions, function (res) {
res.on('data', function (d) {
...
var getOptions = parseUrl('https://api.github.com/user?access_token=' + accessToken);
...
var req = request(getOptions, function (resp) {
...
resp.on('data', function (d) {
...
})
.on('end', function () {
...
})
});

req.end();
});
});

req.write(postData);
req.end();

我删除了一些代码,因为这里的要点是我在请求中有一个请求。现在,nodejs 有 deferreds问题是这是否可以用来简化上面的代码?

最佳答案

嗯,你没有错误处理。 Promises 显着清理了正确传播错误并且不会泄漏资源的代码,因为这些变得自动了。所以不可能进行公平的比较,因为不处理错误的 promise 代码仍然会传播它们。

var Promise = require("bluebird");
var request = Promise.promisifyAll(require("request"));

function githubAuthenticate() {
return request.postAsync(postOptions, postData)
.spread(function(response, body) {
var accessToken = ...
var getOptions = parseUrl('https://api.github.com/user?access_token=' + accessToken);
return request.getAsync(getOptions);
})
.spread(function(response, body) {

});
}

现在想象一下,如果这里出现故障?您只需在一个地方添加一次 .catch 并在那里处理它。由于错误会自动传播,上面的代码不需要做任何事情。消费者代码可以这样做:

  gitHubAuthenticate().then(function() {

}).catch(function(err) {
// Any error that happened with the post, get or your code gets here
// automatically
});

关于javascript - 如何在 nodejs 中使用 https.request 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24046632/

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