我正在向外部 API 发出 http 请求,该 API 要求每个请求都具有不断增加的随机数值。
我遇到的问题是,即使请求按顺序提交,它们也不会按顺序从调用堆栈中弹出(大概)。 I am using the request library 。我的辅助方法的一部分如下所示:
Api.prototype.makeRequest = function(path, args, callback) {
var self = this;
var nonce = null;
var options = null;
// Create the key, signature, and nonce for API auth
nonce = (new Date()).getTime() * 1000;
args.key = self.key;
args.signature = ( ... build signature ... );
args.nonce = nonce;
options = {
url: path,
method: 'POST',
body: querystring.stringify(args)
};
request(options, function(err, resp, body) {
console.log('My nonce is: ' + args.nonce);
.
.
.
});
};
控制台日志导致的随机数顺序不会增加,而是困惑,即使每个请求都必须按顺序创建(我通过将控制台日志放在请求调用之前进行了测试)。我如何执行特定命令?为什么它还没有这样做?任何理解将不胜感激。
最佳答案
由于 Node.js 的异步特性,如果您使用三个不同的随机数值发出三个 HTTP 请求,如下所示
GET http://example.com/?nonce=1
GET http://example.com/?nonce=2
GET http://example.com/?nonce=3
所有三个请求将同时发生。哪个请求从服务器返回响应将是第一个完成的(即它的回调将运行)。
您可以合并异步模块的功能,例如 async.series或async.map确保请求按顺序返回。
关于node.js - Node http 请求无序执行,导致使用随机数值的 API 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19739945/