2017-01-10 2 views
0

Я получаю массив с несколькими данными, и я должен сделать запрос для каждого элемента массива. Но это дало мне promise pending. Как я могу это решить? В чем проблема?Express - обещание, ожидающее ответа на запросы цикла

 getFamilies(req, res) 
     { 
     console.log(req.params.data); 
     var parsedData = JSON.parse(req.params.data); 
     var compounds = parsedData[0].compounds; 
     var supplier = parsedData[0].supplier; 
     var families = parsedData[0].families; 
     console.log(parsedData[0].compounds.length); 

     var parts = []; 
     for (var i = 0; i < compounds.length; i++) 
     { 
      console.log(families[i]); 
      console.log("SELECT u_part.u_idpart, u_part.u_order, u_part.u_familia, st.fornecedor, st.design, st.ref FROM u_part INNER JOIN st ON u_part.u_familia = st.familia WHERE st.fornecedor ='" + supplier +"' and u_part.u_familia="+ families[i]); 
      parts.push(request.query("SELECT u_part.u_idpart, u_part.u_order, u_part.u_familia, st.fornecedor, st.design, st.ref FROM u_part INNER JOIN st ON u_part.u_familia = st.familia WHERE st.fornecedor ='" + supplier +"' and u_part.u_familia="+ families[i])); 
     } 

     return Promise.all([parts]).then(function(listOfResults) 
     { 
      console.log(listOfResults[0]); 
      console.log("done"); 
     }).catch(function(err) 
     { 
      // ... query error checks 
      console.log(err); 
     }); 
} 

Спасибо

+0

В каком коде вы получаете «обещание в ожидании»? – Bergi

ответ

2

Promise.all принимает массив обещаний, которые parts уже есть, а не массив массивов обещаний ([parts]). Использовать

return Promise.all(parts).then… 
//    ^ ^
0

.then возвращает обещание так, что нужно делать вещи в .then и не вернуть его.

Promise.all([parts]).then(listOfResults => { 
    res.send(JSON.stringify(listOfResults)) //for example 
}, err => { 
    res.send(500, JSON.stringify(err)); // for example 
}); 
Смежные вопросы