javascript - 无法在 firebase 函数中获取 setState

标签 javascript reactjs firebase react-native

首先我将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/

相关文章:

javascript - 箭头函数参数

javascript - 无法从 React Native 中的不同文件夹导入图像

android - 我在 FirebaseRecyclerAdapter 类中找不到 populateViewHolder 方法

firebase - 复杂的 Firebase 安全规则

android - 如何使用 firebase 按查询进行排序

javascript - 使用 Javascript 在浏览器中解析 PDF 表单数据

javascript - 开 Jest 深方法 spy

javascript - Div 背景颜色不填充高度

reactjs - 使用带有 typescript 的 ag-grid-react 的错误

javascript - 在 Textarea 中显示选中的复选框