Javascript 无法使用Promissions=>;更新firebase参考值;我保证
我在firebase中有两个参考资料: 1.产品 2.营养 情景是当用户填写一份选择列表时,其营养(2)参考中的营养值应从产品参考(1)下维护的产品目录中选取 下面是我试图使用的代码,但不确定我缺少了什么,下面的代码只更新第一个产品营养内容。我是Angular2和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(
//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);
})
}
仍在为此挣扎。有什么需要帮忙的吗?还在挣扎。有人帮忙吗。?