2017-01-10 14 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]).then(listOfResults => { 
    res.send(JSON.stringify(listOfResults)) //for example 
}, err => { 
    res.send(500, JSON.stringify(err)); // for example 
}); 

Promise.all既に約束([parts])の配列の配列されていないparts、約束の配列をとります。使用する

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

.thenありがとう、あなたがそれを返す.thenにものを行うとする必要はありませんので、約束を返します。