如何在 firebase 中手动拍摄多个快照

丹尼尔·马丁内斯

我正在使用 javascript 制作票证生成器。我正在使用 firebase 为用户提供一个已经存储在数据库中的代码。我的数据库布局如下:

"qrcodes" : {
    "23KU8877" : {
          "email" : "[email protected]",
          "ticketgenerated" : "true"
    },
    "288RX9U5" : {
          "email" : "[email protected]",
          "ticketgenerated" : "true"
    }
}

我的脚本允许我获取 qrcodes 列表中的第一个代码,然后将其移动到另一个网站处理它的另一个数据库。但我想找到一种方法,使函数每次运行时都拍摄新快照。

从 firebase 获取数据的函数在这里:

function generatehtml(){
    ticketname = document.getElementById('name').value;
    ticketemail = document.getElementById('email').value;
    adultnumber = document.getElementById('adults').value;
    childnumber = document.getElementById('child').value;

    while (functionruncount < inputnumber){
        grabfirebasecode();
    }    
}

function grabfirebasecode(){
    ref.limitToFirst(1).once('value', function(snapshot) {
            for(key in snapshot.val()){
                genvar = snapshot.child(key + "/ticketgenerated" ).val();
                var genvarpath = "test/" + key + "/ticketgenerated";
                if (genvar === "false"){
                    snapshot.forEach(function(childSnapshot) {
                        ref.child(childSnapshot.key).remove();
                    });
                    ref2.child(key).set({
                        email: ticketemail,
                        ticketgenerated: "true",
                    });
                    createticket();
                } 
            }

        });
    functionruncount ++;
}

所以如果上面的代码成功运行并抓取了二维码列表的第一个孩子(例如“23KU8877”),无论函数循环多少次,它都会保持不变。

我不知道如何解决这个问题。任何帮助,将不胜感激。

谢谢,丹尼尔马丁内斯

弗兰克·范·普费伦

您在紧密循环中多次附加相同的侦听器。所有这些侦听器几乎同时开始,因此都从数据库中看到相同的值。要获得下一个代码,您必须确保在删除前一个代码后才开始阅读下一个代码。一种常见的方法是使用递归函数:

function generatehtml(){
    ticketname = document.getElementById('name').value;
    ticketemail = document.getElementById('email').value;
    adultnumber = document.getElementById('adults').value;
    childnumber = document.getElementById('child').value;

    grabfirebasecode(inputnumber);
}

function grabfirebasecode(inputnumber){
  if (inputnumber > 0) {
    ref.limitToFirst(1).once('value', function(snapshot) {
        for(key in snapshot.val()){
            genvar = snapshot.child(key + "/ticketgenerated" ).val();
            var genvarpath = "test/" + key + "/ticketgenerated";
            if (genvar === "false"){
                var promises = [];
                snapshot.forEach(function(childSnapshot) {
                    promises.push(ref.child(childSnapshot.key).remove());
                });
                promises.push(
                  ref2.child(key).set({
                    email: ticketemail,
                    ticketgenerated: "true",
                  })
                );
                Promise.all(promises).then(function() {
                  grabfirebasecode(inputnumber-1);
                });
                createticket();
            } 
        }
    });
  }
}

所以这段代码构建了一个 promises 数组,每个异步发生的数据库操作一个。当所有这些操作完成后,它会再次用一个情人号码呼叫自己。

如果您createticket()还执行异步操作,您可能还希望将其包含在promises数组中,以便在下一次迭代开始之前完成其工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Firebase Analytics中手动设置性别用户属性?

来自分类Dev

如何在iOS Swift应用程序中从Firebase手动发布数据?

来自分类Dev

如何在Android中手动保存图像(使用相机拍摄)

来自分类Dev

如何从手动创建的Firebase动态链接中收集统计信息?

来自分类Dev

拍摄一些手动存储在Firebase存储中的图像,并在我的React Native应用中使用它

来自分类Dev

如何在NodeJ中手动更新多个Mongo文档?

来自分类Dev

如何手动下载快照包?例如,用wget?

来自分类Dev

如何在SSRS中手动删除订阅?

来自分类Dev

如何在MVC 6中手动验证模型

来自分类Dev

如何在C中手动迭代堆栈帧?

来自分类Dev

如何在PySide中手动触发aboutToQuit信号

来自分类Dev

如何在Android Studio中手动运行Proguard?

来自分类Dev

如何在ReactJS中手动设置输入值?

来自分类Dev

如何在Python中手动创建稀疏矩阵

来自分类Dev

如何在自制软件中手动安装zenity?

来自分类Dev

如何在Magento中手动更新库存数量

来自分类Dev

如何在iOS钥匙串中手动存储?

来自分类Dev

如何在Visual C ++中手动处理名称?

来自分类Dev

如何在RabbitMQ中手动提取队列数据?

来自分类Dev

如何在Symfony中手动管理CRSV令牌?

来自分类Dev

如何在JOOQ中手动创建RecordN的实例?

来自分类Dev

如何在Solr中手动合并线段?

来自分类Dev

如何在angularjs中手动停止摘要循环

来自分类Dev

如何在WPF中手动触发RelayCommand?

来自分类Dev

如何在Rails中手动插入分页符?

来自分类Dev

如何在Eclipse中手动安装WTP?

来自分类Dev

如何在SwiftUI中手动显示contextMenu?

来自分类Dev

如何在python中手动处理图像

来自分类Dev

如何在SAS EG中手动输入数据

Related 相关文章

热门标签

归档