1

我正在向外部 API 发出 http 请求,该 API 要求每个请求都具有不断增加的 nonce 值。

我遇到的问题是,即使请求按顺序提交,它们也没有按顺序从调用堆栈中弹出(大概)。 我正在使用请求库。我的辅助方法的一部分如下所示:

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);
       .
       . 
       .
   });
};

控制台日志导致随机数顺序不会增加,而是混乱,即使每个请求都必须按顺序创建(我通过将控制台日志放在请求调用之前对此进行了测试)。我如何执行某个命令?为什么它还没有这样做?任何理解将不胜感激。

4

1 回答 1

0

由于 Node.js 的异步特性,如果您使用三个不同的 nonce 值发出三个 HTTP 请求,如下所示

GET http://example.com/?nonce=1
GET http://example.com/?nonce=2
GET http://example.com/?nonce=3

所有三个请求将同时发生。哪个请求从服务器得到响应将是第一个完成的(即它的回调将运行)。

您可以合并 async 模块的功能,如async.seriesasync.map以确保请求按顺序返回。

于 2013-11-02T14:04:12.763 回答