Вложенные запросы блокируются

Я относительно новичок в 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 не определено

Мой вопрос к вам:Should I only be performing one request at a time? Я мог бы сохранить токен с первого разаrequest() и перенаправить пользователя на второйrequest() это поможет? У меня была большая совесть по поводу асинхронности, а не блокировки, и я шокирован тем, что это происходит. Любой отзыв будет отличным!

 Joseph24 авг. 2012 г., 03:20
где этоnewParameters родом из? это из предыдущего запроса? Вы можете опубликовать более краткий код?
 ThomasReggi24 авг. 2012 г., 03:09
нет там нет
 Joseph24 авг. 2012 г., 02:25
Есть ли действительно закрывающая скобка послеparameters?

Ответы на вопрос(1)

Решение Вопроса

Я предпочитаю этот шаблон, так как я делю все на именованные функции, которые намного легче читать.

Когда функция завершается, она вызывает 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 снова завершается. Перенаправление будет происходить только после получения ответа.

 ThomasReggi17 нояб. 2012 г., 09:19
Этот ответ сильно повлиял на мой новый стиль кодирования с помощью асинхронных и обратных вызовов. Я не осознавал этого до сих пор. Это действительно важно при работе с JavaScript и node.js, спасибо большое.

Ваш ответ на вопрос