2017-01-06 7 views
0

Я хочу показать мой код:Как передать значение request.GET обратного вызова с использованием async.series node.js

request({url: API_URL}, function (error, response, body) { 

    if (!error && response.statusCode == 200) { 

     console.log("Items received with success."); 
     var data = JSON.parse(body); 

     // catch duration from video 
     for(var list in data) { 
      var item = data[list]; 

      async.series([ 
       function(callback){ 
        console.log("I'm inside fileExists function"); 
        var result = ''; 
        request.get('http://tobeymotos.com.br/video.mp4', function (error, response, body) { 
         if (!error && response.statusCode == 200) { 
          var video = body; 
          console.log("File exists and is OK"); 
          var result = true; 
          console.log("Valor da result", result); 
         } 
         else{ 
          console.log("This file do not exists, check error: "+ error); 
          var result = "xixi"; 
         } 
        }); 
        // usar aqui 
        callback(null, result); 
       }, 
       function(callback){ 
        // catch video duration 
        file = "http://tobeymotos.com.br/video.mp4"; // used as e.g. 
        console.log("I'm inside getVideoDuration function"); 
        getDuration(file).then(function (duration) { 
         console.log("Duração do vídeo: " +duration); 
         return duration; 
        }); 
        callback(null, 'b'); 
       }, 
       function(callback){ 
        // code c 
        callback(null, 'c'); 
       }, 
       function(callback){ 
        // code d 
        callback(null, 'd'); 
      }], 
      // optional callback 
      function(err, results){ 
       console.log(results); 
      } 
      ) 

      return 0;   
     } 
    } else { 
     console.log("Error: "+error); 
    } 
}); 

Я использую async.series для выполнения некоторых functions в последовательности, потому что я зависят от результата первого, чтобы продолжить со следующего.

Как вы можете видеть, у меня есть «request.get» в первом function, где:

request.get('http://tobeymotos.com.br/video.mp4', function (error, response, body) { 
        if (!error && response.statusCode == 200) { 
         var video = body; 
         console.log("File exists and is OK"); 
         var result = true; 
         console.log("Valor da result", result); 
        } 
        else{ 
         console.log("This file do not exists, check error: "+ error); 
         var result = "xixi"; 
        } 
       }); 
       // usar aqui 
       callback(null, result); 

Проблема в том, что я не могу назвать привести к callback, он просто не «exit» request.get

Некоторая помощь?

ответ

0
request({url: API_URL}, function (error, response, body) { 

    if (!error && response.statusCode == 200) { 

     console.log("Items received with success."); 
     var data = JSON.parse(body); 

     // catch duration from video 
     for(var list in data) { 
      var item = data[list]; 

      async.series([ 
       function(callback){ 
        console.log("I'm inside fileExists function"); 
        var result = ''; 
        request.get('http://tobeymotos.com.br/video.mp4', function (error, response, body) { 
         if (!error && response.statusCode == 200) { 
          var video = body; 
          console.log("File exists and is OK"); 
          var result = true; 
          console.log("Valor da result", result); 
          callback(null, result); 
         } 
         else{ 
          console.log("This file do not exists, check error: "+ error); 
          var result = "xixi"; 
          callback(null, result); 
         } 
        }); 
        // usar aqui 

       }, 
       function(callback){ 
        // catch video duration 
        file = "http://tobeymotos.com.br/video.mp4"; // used as e.g. 
        console.log("I'm inside getVideoDuration function"); 
        getDuration(file).then(function (duration) { 
         console.log("Duração do vídeo: " +duration); 
         return duration; 
        }); 
        callback(null, 'b'); 
       }, 
       function(callback){ 
        // code c 
        callback(null, 'c'); 
       }, 
       function(callback){ 
        // code d 
        callback(null, 'd'); 
      }], 
      // optional callback 
      function(err, results){ 
       console.log(results); 
      } 
      ) 

      return 0;   
     } 
    } else { 
     console.log("Error: "+error); 
    } 
}); 

Ваш обратный вызов вне функции request.GET, это может вызвать ваш обратный вызов для вызова до того, как запрос вернулся из-за природы Node JS. Узел JS не блокируется и поэтому не дожидается выполнения функции, прежде чем перейти к следующему, если явно не указано. Ввод обратного вызова внутри функции ответа request.get заставит его ждать возврата запроса и затем выполнить обратный вызов с результатом

Смежные вопросы