Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Firebase:从实时数据库自动弹出随机元素

Firebase:从实时数据库自动弹出随机元素
EN

Stack Overflow用户
提问于 2021-08-02 16:51:52
回答 1查看 40关注 0票数 0

我的firebase实时数据库从一小部分按任意顺序排列的唯一元素开始。用户可以从这个列表中获取元素,从数据库中自动弹出它,这样其他用户就不能拥有相同的元素。用户还可以将弹出的元素返回到列表。这样,用户当前持有的元素和留在数据库中的元素就得到了保留。该列表足够小(最大27元素),如果需要,我可以有效地将整个数据库内容加载到内存中。

我正在努力将这种行为表达到我的web (纯javascript) firebase应用程序中。我见过firebase transactions,但我不确定如何使用它们,以便弹出的子代被伪随机地选择。

这是一个违反原子性的不充分的尝试(用户可能最终弹出/获取相同的元素)

代码语言:javascript
运行
AI代码解释
复制
function popRandElem() {

    // fetch all elements currently in db list
    db.ref('list').get().then( (snap) => {

        // choose random element
        var elems = snap.val();
        var keys = Object.keys(elems);
        var choice = keys[ keys.length * Math.random() << 0 ];

        // remove chosen element from db
        db.ref('list').child(choice).remove();

        return elems[choice];
    }
}

myElem = popRandElem();
代码语言:javascript
运行
AI代码解释
复制
function restoreElem() {
    db.ref('list').push(myElem);
    myElem = null;
}

我如何修改这个例子,使popRandElem从数据库中自动弹出?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-02 19:36:47

这对于事务来说很简单,使用可选的第二个回调来获得成功弹出的元素。

代码语言:javascript
运行
AI代码解释
复制
function popRandElemAsynch() {

    var choice = null;
  
    db.ref('list').transaction(

        // repeats with updated list until run without collision
        function( list ) {

            // discard previous repetition choice
            choice = null;

            // edge-case of list emptied during transac repeats 
            if (!list)
                return list;
      
            // choose and remember a random element
            var keys = Object.keys(list);
            choice = keys[ keys.length * Math.random() << 0 ];

            // remove the element
            delete list[choice];
            return list;
        },

        // runs once after above has run for final time
        function() {
        
            // choice is the final uniquely popped element
            // if it is null, list was emptied before collision-free pop
            someFunc(choice);
        },

        // don't trigger premature events from transaction retries
        false
    );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68629223

复制
相关文章
27. R 数据整理(二:将文本数据转换为数据框或列表)
最近遇到一个问题,需要读取MsigDB/h.all.v7.2.symbols.gmt 文件进行分析:
北野茶缸子
2021/12/17
3.3K0
27. R 数据整理(二:将文本数据转换为数据框或列表)
jQuery将form列表转JSON
一、form表单序列化后的格式 image.png 二、JS 函数 function filedSelectJson(){ var a = {}; var reserveVenueCons = $("#orderForm").serializeArray(); var numreg = /\[[0-9]*\]\./;//正则表达式 var index = 0; var attnum = 5;//list对象中有几个属性,这里有5个:reserveField.id,
week
2018/08/27
3.8K0
jQuery将form列表转JSON
Python将字符串转换为列表
We can convert a string to list in Python using split() function.
全栈程序员站长
2022/09/06
6.3K0
将tensor转换为图像_tensor转int
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
12.2K0
Java将列表转换为数组,反之亦然
在本文中, 我们将快速学习如何将Java List (例如ArrayList )转换为数组,反之亦然。 如果您希望总体上了解有关ArrayList的更多信息,请随时阅读我们有关Java ArrayLists的文章。
用户7886150
2021/04/28
3.5K0
Python将两个列表转换为字典
最开始,我是想用2层for循环实现,但是发现太麻烦了。最简单的方法,使用zip()函数即可。
py3study
2020/08/26
5.2K0
数据框、矩阵和列表20230202
2、read.csv(" ") ⚠️文件在当前的工作路径中可以直接使用文件名,否则需要使用绝对路径,否则就会报错。
顾卿岚
2023/02/03
1.4K0
java map 转string_java-将Map <String,Object>转换为Map <String,String>
Map map = new HashMap(); //Object is containing String
全栈程序员站长
2022/08/25
12.9K0
Python 元组转换为列表
结论:当给定一个可迭代对象(如列表、元组、集合、范围等)时,list() 和 tuple() 返回一个新的列表和元组
Python学习者
2023/07/17
3200
Java将String类型数据转换为Integet类型
今天在写一个java web项目的时候遇到的问题。 由于java中httpservlet传过来的request数据中,所有数据类型都是String的。 但是我们的业务逻辑当中需要的是id的值,是需要Integer类型,所以在接受到数据后需要做一个强制转换。 示例代码如下:
吃猫的鱼Code
2023/02/02
9510
如何将Pandas数据转换为Excel文件
将数据导出到Excel文件通常是任何用户阅读和解释一组数据的最优先和最方便的方式。通过使用Pandas库,可以用Python代码将你的网络搜刮或其他收集的数据导出到Excel文件中,而且步骤非常简单。
玖柒的小窝
2021/11/01
7.9K0
HTML 下拉列表框<select>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/03
5K0
将VOC格式的数据集转换为COCO格式
import xml.etree.ElementTree as ETimport osimport json coco = dict()coco['images'] = []coco['type'] = 'instances'coco['annotations'] = []coco['categories'] = [] category_set = dict()image_set = set() category_item_id = -1image_id = 20180000000annotation_id
狼啸风云
2021/06/09
3.3K0
基因集合的数据框,列表和对象形式
这些都离不开生物学功能数据库,但是数据库不仅仅是GO/KEGG哦,目前最齐全的应该是属于 MSigDB(Molecular Signatures Database)数据库中定义了已知的基因集合:http://software.broadinstitute.org/gsea/msigdb 包括H和C1-C7八个系列(Collection),每个系列分别是:
生信技能树
2022/12/16
1.7K0
基因集合的数据框,列表和对象形式
Mybatis-plus 使用 typeHandler 将 String 拼接字符串转换为 List 列表
学生可以有多个角色,但是这多个角色我是作为多条记录存储在另外一张表中的,现在想将这多条记录查询出来,注入到Student对象中的一个List属性中去。
wsuo
2023/01/13
6.6K0
Mybatis-plus 使用 typeHandler 将 String 拼接字符串转换为 List 列表
R语言 数据框、矩阵、列表的创建、修改、导出
数据框来源主要包括用代码新建(data.frame),由已有数据转换或处理得到(取子集、运算、合并等操作),读取表格文件(read.csv,read.table等)及R语言内置数据
Magnolia
2023/01/06
8.1K0
将字符串转换为date类型_java字符串转date类型
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
14.8K0
java将字符串转换为json对象的方法_java jsonobject转string
在与服务器交互的时候,我们往往会使用json字符串,今天的例子是java对象转化为字符串,
全栈程序员站长
2022/11/08
22.3K0
58 - 编写一个生产器,将一个二维列表转换为一维列表
编写一个生产器,将一个二维列表转换为一维列表 ''' python生成器(迭代) yield ''' def myGenerator(): numList = [1, 2, 3, 4, 5, 6, 7, 8] for num in numList: yield num for num in myGenerator(): print(num, end=' ') 1 2 3 4 5 6 7 8 ''' [[1,2,3],[2,4,1],[2,4,6]] [1,2,
ruochen
2021/06/08
7980
58 - 编写一个生产器,将一个二维列表转换为一维列表
点击加载更多

相似问题

将(转置)数据列表转换为列

30

将数据框转换为列表

30

将列表转换为数据框

17

将列表列表转换为数据框

421

将列表转换为“转置”列表

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档