2017-01-19 2 views
1

を使用して、firebase基準値を更新することができません: 1.製品ユーザーは選択肢のリストを完了したときに私はfirebaseで2つのリファレンス持って約束=> promise.all

シナリオがある 2.栄養素、彼らの栄養値を(1)

ここでは、私が作業しようとしているコードがありますが、私が紛失しているかわからない、以下のコードは最初の製品の栄養成分のみをアップデートしています。 。私はAngular2とfirebaseで新しいです。

//capturing promises 
    let promises = Object.keys(choices) 
    .map(k => { 
     return new Promise((resolve, reject) => { 
     this.updateNutrtion(choices[k].choice,resolve,reject); 
    }); 
    }); 

    //promise.all 
    Promise.all(promises).then((object)=> console.log(object)); 


    updateNutrtion(choice,res,rej){ 

     //logic to get the nutritions 
     return new Promise((res,rej)=>{ 
    firebase.database().ref('/products/' + choice).once('value',function(snapshot){ 
         snapshot.forEach(function(child){ 

          var consumeDay; 
        var today = new Date().toISOString(); 
        var year = today.split("-")[0]; 
        var month = today.split("-")[1]; 
        var day = (today.split("-")[2]).split("T")[0] 

        consumeDay = day + '-' + month + '-' + year; 

          // update firebase nutrition 

         firebase.database().ref('/nutritions/' + firebase.auth().currentUser.uid + '/' + consumeDay + '/' + child.ref.key).once('value',function(nutrition){ 

          firebase.database().ref('/nutritions/' + firebase.auth().currentUser.uid + '/' + consumeDay + '/' + child.ref.key).update({ 

           unit : child.val().unit, 
           value : (nutrition.val()!=null) ? (nutrition.val().value + child.val().value) : (child.val().value) 

          }) 
         }) 

          return false; 
         }) 

      }).then((key)=>{ 
       res(key); 
      }); 



}) 

} 

私が間違っているところを助けてください。

+0

まだこれで苦労しています。どんな援助も。 – chits

答えて

0

解決済みこれが他の人を助けている場合は、以下のコードを投稿してください。

//handelling promises over an array 
let promises = Object.keys(choices) 
.map(k => { 


    var val =this.updateAllNutritions(choices[k].choice) 
    .then(function(values) { 
     var consumeDay; 
    var today = new Date().toISOString(); 
    var year = today.split("-")[0]; 
    var month = today.split("-")[1]; 
    var day = (today.split("-")[2]).split("T")[0] 
    consumeDay = day + '-' + month + '-' + year; 
     // console.log('all done', values); // [snap, snap, snap] 

     Object.keys(values) 
     .map(j=>{ 

      var unit = firebase.database().ref('/nutritions/' + firebase.auth().currentUser.uid + '/' + consumeDay + '/' + values[j].valueOf).child('unit') 
      var value = firebase.database().ref('/nutritions/' + firebase.auth().currentUser.uid + '/' + consumeDay + '/' + values[j].valueOf).child('value') 
      unit.transaction(function(currentUnit){ 

      return values[j].unit; 

      }); 

      value.transaction(function(currentValue){ 

      return currentValue + values[j].value; 
      }) 



     }) 

    }); 

    }); 


     //update nutritions async function 
     updateAllNutritions(choice){ 

return firebase.database().ref('/products/' + choice).once('value').then(function(snapshot){ 
    var nutritions = []; 

    var consumeDay; 
    var today = new Date().toISOString(); 
    var year = today.split("-")[0]; 
    var month = today.split("-")[1]; 
    var day = (today.split("-")[2]).split("T")[0] 

    consumeDay = day + '-' + month + '-' + year; 
    snapshot.forEach(function(childSnapshot){ 
     var promise = firebase.database().ref('/nutritions/' + firebase.auth().currentUser.uid + '/' + consumeDay + '/' + childSnapshot.ref.key).once('value').then(function(snap){ 

      var snapNull = null; 
      if(snap.val()!=null){ 
      // console.log("currentvalue" + snap.val().value); 
       snapNull = snap.val().value 
      } 


      let promisedettrue = { 
      unit : childSnapshot.val().unit, 
      value : childSnapshot.val().value, 
      valueOf : childSnapshot.ref.key, 
      isNodenull : false, 
      currentValue : snapNull 
      }; 
      let promisedetfalse = { 
      unit : childSnapshot.val().unit, 
      value : childSnapshot.val().value, 
      valueOf : childSnapshot.ref.key, 
      isNodenull : true, 

      }; 
      if(snap.val()==null){ 
      return promisedetfalse; 

      }else{ 
      return promisedettrue; 
      } 



     },function(error){ 
      // The Promise was rejected. 
      console.error(error); 
     }); 
     nutritions.push(promise); 
    }); 
    return Promise.all(nutritions); 
},function(error){ 
    // The Promise was rejected. 
    console.error(error); 
}) 


    } 
関連する問題