2016-03-14 4 views
-1

получает пустой массив, вне функции?пустой массив вне функции

var triggerImageQuery = function(start, length,callback) { 
    var feedData = []; 
    var feedInfo = result.rows[start]; 
    var imgQuery = pgFormat("select * from feedImages where feedId=%L",feedInfo.feedid); 
    model.client.query(imgQuery,function(err,result){ 
     if(result.rows.length > 0){ 
      var imgArr =[]; 
      for(var j=0;j<result.rows.length;j++){ 
        var image = "http://"+config.host+":"+config.port+"/"+result.rows[j].imageurl; 
         imgArr.push(image); 
      } 
      feedData.push(feedInfo); 
      feedData.push(imgArr); 
     } 
     else{ 
      feedData.push(feedInfo); 
     } 
console.log(feedData) // prints data correctly 
    }); 
console.log(feedData) // here data gets empty? 
    if(start < length) { 
     start++; 
     triggerImageQuery(start, length-1); 
    } 
    callback(feedData); // unable to callback here because of empty array` 
} 
triggerImageQuery(0, result.rows.length,function(result){ 
    res.json(result); // `result is empty` 
}); 

Даже я пробовал с объявлением var feedData = []; наверху, но не используется.

, а также попробовал обратный вызов внутри model.client.query, но есть ошибка типа TypeError: callback не является функцией.

+3

Ваш вызов 'model.client.query' является асинхронным, поэтому ваш пустой журнал выполняется до завершения запроса. Вам необходимо выполнить всю работу в обратном вызове из этого вызова. – tymeJV

+0

Возможный дубликат [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/14220321/how-do-return-the-response-from-an-asynchronous-call) –

+0

, и даже я протестировал обратный вызов (feedData) внутри model.client.query, он выдает ошибку, как TypeError: callback не является функцией – karthik

ответ

0

Просто нужно вернуть данные внутри метода client.query.

var triggerImageQuery = function (start, length, callback) { 
    var feedData = []; 
    var feedInfo = result.rows[start]; 
    var imgQuery = pgFormat("select * from feedImages where feedId=%L", feedInfo.feedid); 
    model.client.query(imgQuery, function (err, result) { 
     if (result.rows.length > 0) { 
      var imgArr = []; 
      for (var j = 0; j < result.rows.length; j++) { 
       var image = "http://" + config.host + ":" + config.port + "/" + result.rows[j].imageurl; 
       imgArr.push(image); 
      } 
      feedData.push(feedInfo); 
      feedData.push(imgArr); 
     } 
     else { 
      feedData.push(feedInfo); 
     } 
     console.log(feedData) // here data gets empty? 
     if (start < length) { 
      start++; 
      triggerImageQuery(start, length - 1); 
     } 
     callback(feedData); 
    }); 
} 
triggerImageQuery(0, result.rows.length, function (result) { 
    res.json(result); // `result is empty` 
}); 
+0

тоже пробовал, но есть TypeError: callback не является функцией – karthik

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