首先我将listaa
设置为全局变量
我正在尝试从设置它的 firebase 函数中取出变量(数组)“listaa”...我计划稍后使用它来进行一些数学运算。
我在 firebase 函数中使用了 console.log(listaa) ,它起作用了,
但是当我尝试在外部(firebase 函数)使用 it() 时,它不起作用。
我尝试使用 setState 使其在外部可用,但也不起作用
if (funcionar == 0) {
//============================================================== ANTES ===================================================
var newRef = firebase
.database()
.ref()
.child("TransferenciasPraVendedores/")
.push({
vendedor: vend,
dia: functions.dataHoje(),
hora: functions.horaHoje()
});
var fire = database.ref("EstoqueCadaVendedor/" + vend);
fire.once("value", snap => {
items = [];
snap.forEach(data => {
items.push({
key: data.key,
data: data.val()
});
});
console.log("items:");
console.log(items);
for (j = 0; j < prod.length; j++) {
// var a = parseInt(snap.val().quantidade);
console.log("d: " + items[j].data);
listaa.push(items[j].data);
}
// this.setState({ lista:listaa })
// console.log("lista:");
// console.log(this.state.lista[2]);
console.log("listaa");
console.log(listaa);
});
console.log("listaaaaaaaaaaaaaa");
console.log(listaa);
我将在这里使用“listaa”:
for (i = 0; i < prod.length; i++) {
firebase
.database()
.ref()
.child("EstoqueCadaVendedor/" + vend + "/")
.update({
[prod[i].key]: parseInt(quantNova[i]) + listaa[i]
});
}
// this.setState({ quantidade: [], vendedor: "" });
}
最佳答案
图安在这里。
- 你看不到它的原因是因为你的代码是异步的,所以当你在最后打印console.log()时。 firebase 调用尚未完成。这是典型的竞争条件场景。
仅供引用,我个人更喜欢使用 Promise 风格而不是回调,我认为这使代码更干净,更易于阅读。试试这个:
让 firebaseDB = firebase.database();
如果(函数== 0){
return firebaseDB.ref("TransferenciasPraVendedores/") .push({ vendedor: vend, dia: functions.dataHoje(), hora: functions.horaHoje() }) .then(() => { return firebaseDB.ref("EstoqueCadaVendedor/" + vend).once('value'); .then(snapshot => { let snap = snapshot.val(); items = []; snap.forEach(data => { items.push({ key: data.key, data: data.val() }); }); return {snap, items}; }) .then({snap, items} => { for (j = 0; j < prod.length; j++) { listaa.push(items[j].data); } //console.log(lista)// NOW your lista should have all the items // I would dispatch your redux action here. }) .catch(error => { throw error }
请告诉我是否有帮助。我可以更深入地研究它。致敬:)
关于javascript - 无法在 firebase 函数中获取 setState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52339286/