Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用Promissions=>;更新firebase参考值;我保证_Javascript_Firebase_Firebase Realtime Database_Es6 Promise - Fatal编程技术网

Javascript 无法使用Promissions=>;更新firebase参考值;我保证

Javascript 无法使用Promissions=>;更新firebase参考值;我保证,javascript,firebase,firebase-realtime-database,es6-promise,Javascript,Firebase,Firebase Realtime Database,Es6 Promise,我在firebase中有两个参考资料: 1.产品 2.营养 情景是当用户填写一份选择列表时,其营养(2)参考中的营养值应从产品参考(1)下维护的产品目录中选取 下面是我试图使用的代码,但不确定我缺少了什么,下面的代码只更新第一个产品营养内容。我是Angular2和firebase的新手 //capturing promises let promises = Object.keys(choices) .map(k => { return new Promise(

我在firebase中有两个参考资料: 1.产品 2.营养

情景是当用户填写一份选择列表时,其营养(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);
            });



 })

 }

请帮助我解决问题。

解决了问题。。如果这有助于其他人,请在下面张贴代码

  //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);
})


   }

解决了。。如果这有助于其他人,请在下面张贴代码

  //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);
})


   }

仍在为此挣扎。有什么需要帮忙的吗?还在挣扎。有人帮忙吗。?