node.js - Node http 请求无序执行,导致使用随机数值的 API 出现问题

标签 node.js api request nonce

我正在向外部 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.seriesasync.map确保请求按顺序返回。

关于node.js - Node http 请求无序执行,导致使用随机数值的 API 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19739945/

相关文章:

node.js - 用户注销 : Redirect GET to POST (Node/Express)

request - 如何停止/中止/取消 PhantomJS 中的页面加载?

node.js - nodejs - 证书已过期

api - TeamCity 休息 API

javascript - 使函数成为路由中的快速中间件

api - 如何从 Magento REST API token 中获取用户 ID?

android - Android 上的 Youtube API 播放器

iphone - NSURLRequest : Post data and read the posted page

mysql - 将 docker 容器中运行的 JavaScript 连接到另一个 docker 容器中运行的 MySQL 数据库

node.js - 为什么我的 Heroku Express API 数据是持久的,即使它仅来自变量