2016-05-28 3 views
-1

Вот мой асинхронный фрагмент кода, который он работает правильно, указав URL-адреса сайта, это асинхронный запрос. Я хочу сделать это синхронным запросом. может мне помочь здесь Я использую алхимия апи, чтобы получить корм Из облака я выборка данных Как сделать этот запрос синхронным в node.js

var urls = [website ur names] 
 
for(var j=0;j<urls.length;j++){ 
 
     alchemyapi.feeds("url",urls[j], {}, function(response) { 
 
        console.log(response["feeds"]); 
 
        for(var i=0;i<response["feeds"].length;i++) 
 
         var feed = response["feeds"][i].feed; 
 
         getFeed(feed); 
 
         console.log("Title: " +objToString(response["feeds"][i])); 
 
     }); 
 
} 
 
function objToString (obj) { 
 
    var str = ''; 
 
    for (var p in obj) { 
 
     if (obj.hasOwnProperty(p)) { 
 
      str += p + '::' + obj[p] + '\n'; 
 
     } 
 
    } 
 
    return str; 
 
} 
 
var request = require('request'); 
 
var getFeed = function(feed){ 
 

 
feeds = encodeURIComponent(feed); 
 
request('http://cloud.example.com/v3/mixes/contents?streamId=feed/'+feeds/, function (error, response, body) 
 
{ 
 
    if (!error && response.statusCode == 200) 
 
    { 
 
    console.log(body) 
 
    } 
 
    else 
 
    { 
 
    console.log("Error "+response.statusCode) 
 
    } 
 
}); 
 
}

+0

Синхронный запрос сделает nodejs сервер или блока не думаю, что будет какой-либо ситуации, которые подходят синхронный запрос , –

+0

нет, сэр, почему он заблокирует сервер nodejs, и я получаю данные с помощью алхимии api – Irrfan23

+0

с помощью обещания js, мы не можем сделать это синхронно @gumingfeng – Irrfan23

ответ

0
var urls = [website ur names] 

var request = require('request'); 

function promiseRequest(feeds){ 
    return new Promise(function(resolve,reject){ 
    request('http://cloud.example.com/v3/mixes/contents?streamId=feed/'+feeds/,    
     function (error, response, body)  
    { 
     if (!error && response.statusCode == 200) 
     { 
     resolve(body); 
     } 
     else 
     { 
     reject(response.statusCode); 
     } 
    }); 
    } 
} 

function getFeedsFromUrls(urls){ 
    return new Promise(function(resolve,reject){ 
     var count=0,totalCount = urls.length; 
     var result=[]; 
     for(var j=0;j<urls.length;j++){ 
      alchemyapi.feeds("url",urls[j], {}, function(response) { 
       for(var i=0;i<response["feeds"].length;i++) 
        var feed = response["feeds"][i].feed; 
        promiseRequest(feed).then(function(data){ 
         count++; 
         result.push(data); 
         if(count>=totalCount){ 
          resolve(result); 
         } 
        }).catch(function(err){ 
         count++; 
         if(count>=totalCount){ 
          resolve(result); 
         } 
        }); 

      }); 
     } 
    }); 
} 

getFeedsFromUrls(urls).then(function(result){ 
    console.log(result); 
}) 
+0

Должен ли я назвать это из цикла или извне? и что такое «xxx» btw благодарит за ответ (y) – Irrfan23