Nodejs Синхронный цикл

1

Может ли кто-нибудь помочь мне запустить цикл ниже синхронно? Поскольку приведенный ниже код запускается асинхронно, значение arra всегда возвращает значение null.

var arra=[];
//Query doctors collection and get necessary details           
for (i = 0; i <arr.length; i++) {
    var docregistrationnumber = arr[i].docregistrationnumber
    var registrationAuthority = arr[i].docregistrationauthority                
    doctorData.getDoctorByRegNumber(docregistrationnumber,registrationAuthority,function(data){
        console.log(JSON.stringify(data))  
        arra.push(data)                
    })
} 
console.log(arra) 
  • 0
    Нет, синхронную функцию невозможно запустить синхронно. Вы можете рассчитывать время звонков последовательно, хотя. Используйте рекурсивный подход.
Теги:
promise

1 ответ

3
Лучший ответ

вы можете попробовать async/await

var arra = [];
//Query doctors collection and get necessary details    

async function getData() {
  for (i = 0; i < arr.length; i++) {
    var docregistrationnumber = arr[i].docregistrationnumber
    var registrationAuthority = arr[i].docregistrationauthority
    var data = await doctorData.getDoctorByRegNumber(docregistrationnumber, registrationAuthority);

    arra.push(data);   
  }

  return arra;
}  

getData().then( data => console.log(data) );  
  • 0
    Какой пакет npm я должен установить для работы с библиотекой async / await
  • 1
    Это не библиотека, это особенность языка. Вам нужно использовать Node 7.6 или новее. getDoctorByRegNumber также должен возвращать Promise, чтобы это работало.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню