2015-03-04 5 views
0

Я новичок в node.js, я не могу понять, как это решить. Как Node.js является асинхронной природы я не могу предсказать результат в структурированном виде ...async nature in node.js

Мой сценарий выглядит следующим образом:

aysnc.foreach(Object.keys(req.body), function(elem){ 
    if(elem !== aaaa){ 
     client.search(Query).then(function(Data){ 
      //----------> For every query is a callback, so after 
      // sending the result to front-end this callback is returning. 
      // I have to make this query executed and return result and 
      // after that only the next loop should start. 

      //some logic here 
      arr1;-------------->populating result for each query 
     }); 
    } else { 
    aysnc.foreach(Object.keys(req.body.xxxx), function(elem){ 
     client.search(Query).then(function(Data){ 
     //some logic here 
     arr2; 
     }); 
    }); 

}); Наконец то, что я должен сделать, это:

if(--Object.keys(req.body).length === 0){ 
intersect arr1 an arr2 
} 

Я должен пересекаться arr1 и arr2. Но перед заполнением arr1 и arr2 асинхронная природа завершает цикл, а arr1 и arr2 пуст.

Мне нужно все синхронизировать. Поделитесь своими идеями. Заранее спасибо.

+4

Пожалуйста, разместите код с правильным отступом, не имеет синтаксических ошибок и полностью воспроизводит вашу проблему. – Tomalak

+0

Что такое асинхронный элемент? Async.foreach – aludvigsen

ответ

1

Вы пытались использовать async.js caolan? ссылка: https://github.com/caolan/async

попробуйте что-нибудь подобное.

var counter = 0; 
var arr1 = []; 
async.each(Object.keys(req.body), function(elem, callback) { 
    //checks if counter, if equal callback to send the total 
    if(counter == req.body.length) {   
    callback(null, arr1); 
    } else { 
    //do your query here 
    // put your if else here 
    counter++; 
    if(elem == null) { 
     //call callback for error 
     callback('error elem is null', null) 
    } 
    } 
}, function(err, total){ 
    if(err) { 
     res.send(400); 
    } else { 
     res.send(200); 
     //you will see the the combined array here 
     console.log(total); 
     console.log('processed successfully'); 
    } 
}); 
+0

спасибо. Я это попробую. – Subburaj

+0

Спасибо за ваше время. Но console.log (всего); подходит для меня как неопределенное. – Subburaj