Вопрос по asynchronous, nonblocking, node.js, javascript – Вложенные запросы блокируются

3

Я относительно новичок в 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() это поможет? У меня была большая совесть по поводу асинхронности, а не блокировки, и я шокирован тем, что это происходит. Любой отзыв будет отличным!

Есть ли действительно закрывающая скобка послеparameters? Joseph
нет там нет ThomasReggi
где этоnewParameters родом из? это из предыдущего запроса? Вы можете опубликовать более краткий код? Joseph

Ваш Ответ

1   ответ
5

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

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

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

Похожие вопросы