嵌套请求正在阻止

时间:2012-08-24 00:11:01

标签: javascript node.js asynchronous nonblocking

我对nodejs比较陌生。我最近把我过去几个月收集的所有集体知识汇集到了一个项目中。我相信我遇到了nodejs中的第一个“阻塞”问题。

我有一个页面加载两个request()个调用,它们是异步的,并相应地嵌套。最里面的一个使用来自最里面的数据来重定向用户。

  request(parameters,function(error, response, data){
      //the first request passes a token  
      request(newParamters,function(error, response, data){
          //the second request passes a url
          res.redirect(data.info.url);
      });
  });

错误是当我在许多浏览器标签中打开它时,它在第一对夫妇之后就会中断,然后服务器说data.info.url未定义。

我的问题是:我是否应该一次只执行一个请求?我可以保存第一个request()的令牌并将用户重定向到第二个{{1}这会有帮助吗?我一直非常注重异步和不阻塞,我很震惊这种情况正在发生。任何反馈都会很棒!

1 个答案:

答案 0 :(得分:6)

这样嵌套会导致很多问题。

我更喜欢这种模式,我将所有内容分解为更容易阅读的命名函数。

当一个函数完成时,它会调用next,依此类推。

parameters = {};   //define parameters
first(parameters); // call first function to kick things off.

var first = function(parameters) {

      request(parameters,function(error, response, data){
         newParamters = date.something;        
         second(newParamters, data); //call second function         
     });
};

var second = function(newParamters, data){

      request(newParamters,function(error, response, data){
          res.redirect(data.info.url);
     });
}

这种模式是“非阻塞的”,因此当第一个请求发出时,nodejs进程退出并在接收到响应时继续,然后第二个函数将被调用。

当第二个请求发出时,nodejs进程再次退出。 重定向仅在收到响应后才会发生。