gpt4 book ai didi

node.js - Node 中同步请求调用

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:59 24 4
gpt4 key购买 nike

我正在使用标准的“请求”模块

https://www.npmjs.org/package/request

我想知道 - 我是否有两个连续/顺序的请求调用,如下所示:

request.post({...});`  //first request

request.get({...});` //second request

...如何同步,以便第一个请求始终在第二个请求被调用之前完成(第一个请求是身份验证,因此肯定需要首先发生)。

我知道如何做到这一点的唯一方法就是像这样嵌套它们:

 request.post({
url: teamsnapURL,
json: {
user: "the1mills@yahoo.com",
password: "******"
}
}, function (err, res, body) {
if (err) {
throw err;
}
teamSnapToken = res.headers['x-teamsnap-token'];

request.get({
url: 'https://api.teamsnap.com/v2/teams',
json: {
},
headers: {
'x-teamsnap-token':teamSnapToken
}
}, function (err, res, body) {
if (err) {
throw err;
}
else{
console.log('body:',body)
}

})
});

还有别的办法吗?

一种方法是使用 Node 约定传入回调函数“next”,并在身份验证有效时调用该函数,否则抛出错误。我会看看是否能弄清楚这一点并将其添加为答案(这个问题不仅仅只有一个答案)。

这里是非嵌套回调方式,通过传递函数作为参数来解决。这似乎是避免大量嵌套函数调用的标准。

var request = require('request');
var teamsnapURL = 'https://api.teamsnap.com/v2/authentication/login';

var teamSnapToken = null;

var makeGetRequest = function(){

request.get({
url: 'https://api.teamsnap.com/v2/teams',
json: {

},
headers: {
'x-teamsnap-token':teamSnapToken
}
}, function (err, res, body) {
if (err) {
throw err;
}
else{
console.log('body:',body)
}

});

};

var authPost = function(makeGetRequest){

request.post({
url: teamsnapURL,
json: {

user: "the1mills@yahoo.com",
password: "*******"
}
}, function (err, res, body) {
if (err) {
throw err;
}
teamSnapToken = res.headers['x-teamsnap-token'];
makeGetRequest();

})};

authPost(makeGetRequest);

尽管我不得不说,这似乎只是将函数用作对象的一个​​愚蠢的借口,因为两个函数都在同一个文件中,所以您可以通过名称调用另一个函数,而无需将其嵌套或作为参数传入,什么的。

最佳答案

差不多就是这样 - 您知道请求已完成的方式是触发回调,因此如果您在第一个请求完成后必须发生某些事情,则必须在回调中执行它。

有一些方法可以让这看起来更容易,但本质上仍然是一样的。例如,使用 async库,像这样:

async.waterfall([
function (done) {
request.post(firstRequest, function (err, res, body) { done(err, res, body); });
},
function (done, res, body) {
teamSnapToken = res.headers[...];
request.get(second-request, function (err, res, body) { done(err, res, body); });
}
],
function (err, result) {
// final callback here
});

关于node.js - Node 中同步请求调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27309525/

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