4

我对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()并将用户重定向到第二个request(),这有帮助吗?我对异步而不是阻塞非常有良心,我对这种情况的发生感到震惊。任何反馈都会很棒!

4

1 回答 1

7

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

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

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

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 进程再次退出。重定向只会在收到响应后发生。

于 2012-08-25T05:47:52.023 回答