Не набирай go до следующего, затем обещай, пока не будет сделано предыдущее - PullRequest
0 голосов
/ 27 апреля 2020

На моем сервере узлов у меня есть следующий код, использующий mysql для выполнения запросов

query('select id from client where cat=12')          
        .then((result)=>{    
          details = result.results; 
          details.forEach(element => {
             user.getInfo(element.id)
             .then((result)=>{ 
              console.log('results are ',result) ;
              myArray.push(result);
                if(myArray.length == details.length){
                  return myArray;
                } 
             })
          });
        })
        .then((result)=>{            
          console.log('check',result) ;

//.......

Лог c этого равен

возьмите несколько идентификаторов и для каждого запустите функцию, которая находится в другом файле (user.getInfo часть) pu sh каждый результат функции в массив (myArray), если длина myArray равна длине деталей , это означает, что не осталось никаких элементов, поэтому мы можем вернуться к следующему then

Проблема в том, что user.getInfo занимает некоторое время, и я думаю, что из-за user.getInfo(element.id).then он возвращается к последний, затем сразу, и я вижу сначала 'check',undefined, а затем вижу results are с результатами

Я бы хотел, чтобы user.getInfo ожидал результатов и go до следующего, только когда у него есть данные.

Как я могу это сделать?

Спасибо

...