2017-06-10 12 views
-1

すべてのSQLクエリが完了するのを待つnode.jsコードを持っています。 を処理し、次の部分を処理します。Promises.all()は約束を解決するのを待っていません

ここで私は約束を返して、配列に格納しています。 すべての約束が返ってから、私はいくつかの計算をしたい。 Promises.all()は、約束が解決するのを待っていないようで、計算段階で私に0を与えますか?

私が間違いを犯している場所で誰かが私を助けることができますか?

var results= []; 
    var salaries = 0; 
    var numberOfWorking = 0; 
    var numberOfNotFound = 0; 
    var numberOfFound = 0; 
    var averageSalary = 0; 
    var promises = []; 
    for (grad in graduates) { 
     promises.push(function() { 
     return new Promise(function (resolve, reject) { 
      var entree = graduates[grad]; 
      console.log("entree:", JSON.stringify(entree)); 
      var query = "SELECT Salary FROM employment WHERE FirstName='" + entree['firstName'] + "' AND MiddleName='" + entree['middleName'] + "'" + 
      "AND LastName='" + entree['lastName'] + "' AND DOB='" + entree['birth'] + "'"; 

      connection.query(query, function (err, rows, fields) { 
      if (!err) { 

       if (rows.length == 0) { 
       numberOfNotFound = numberOfNotFound + 1; 
       } 
       else { 

       var Salary = parseInt(rows[0].Salary, 10) 
       console.log("Salary", Salary); 
       numberOfFound = numberOfFound + 1; 
       salaries += Salary; 
       if (Salary > 0) { 
        numberOfWorking = numberOfWorking + 1; 
       } 
       console.log("salaries", salaries); 
       console.log("numberOfFound", numberOfFound); 
       console.log("numberOfWorking", numberOfWorking); 
       resolve(true); 
       } 
      } 
      else { 
       console.log(req.body); 
       console.log("ERROR:", err); 
       reject(err); 
      } 
      }); 
     }); 
     }); 
    } 
    Promise.all(promises).then(function (dataArr) { 
     if (numberOfFound > 0) { 
     averageSalary = salaries/numberOfFound; 
     } 
     else { 
     averageSalary = 0; 
     } 
     console.log("salaries", salaries); 
     console.log("averageSalary", averageSalary); 
     console.log("numberOfFound", numberOfFound); 
     console.log("numberOfWorking", numberOfWorking); 
     var tosendOnePkg = {}; 

     tosendOnePkg = { 
     "packageID": pId, 
     "numberOfPersons": numberOfFound + numberOfNotFound, 
     "numberOfWorkingPersons": numberOfWorking, 
     "notFoundPersons": numberOfNotFound, 
     "averageSalary": averageSalary 
     } 
     tosendOnePkg['packageID'] = package; 
     results.push(tosendOnePkg); 
    }); 
+2

promises.push(function() { return new Promise(function (resolve, reject) { ... } }); 

代わりに、あなたが約束自体を追加する必要があります'' function(){ return' - とそれに対応する '}' –

+0

も削除しようとすると、 'tosendOnePkg ['packageID'] = package ; 'パッケージがどこにも定義されておらず、 'tosendOnePkg.packageID'が前のステートメントで' pId'に設定されているので、奇妙なコードのようです! –

+0

@JaromandaXありがとう!実際にはこれは完全なものではなくコードの一部です! –

答えて

0

問題は、あなたが約束配列に機能を追加しているということです、あなたの例の9行目を参照してください。

promises.push(new Promise(function (resolve, reject) { 
    ... 
}); 
+0

ありがとう!それは働いた –

+0

それを聞いて嬉しい:-) –

関連する問題