Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中的实时firebase数据库上创建新ID_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

在javascript中的实时firebase数据库上创建新ID

在javascript中的实时firebase数据库上创建新ID,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我正在尝试在实时firebase数据库上创建一个长度为5的新唯一ID,它只包含大写字母和数字。我解决这个问题的想法是创建一个ID,检查数据库中是否已经存在这个ID,如果已经存在,则创建一个新ID并重复,直到找到唯一的ID为止。我不确定如何利用数据库调用的异步性质来解决这个问题。我尝试过使用承诺来解决这个问题,但我不确定如何使用递归承诺来解决这个问题 就我所知: const database = firebase.database(); function createRoom() { /

我正在尝试在实时firebase数据库上创建一个长度为5的新唯一ID,它只包含大写字母和数字。我解决这个问题的想法是创建一个ID,检查数据库中是否已经存在这个ID,如果已经存在,则创建一个新ID并重复,直到找到唯一的ID为止。我不确定如何利用数据库调用的异步性质来解决这个问题。我尝试过使用承诺来解决这个问题,但我不确定如何使用递归承诺来解决这个问题

就我所知:

const database = firebase.database();

function createRoom() {
    //Create random ID of length 5 consisting of only uppercase letters and numbers
    const ID = createID(5);

    return new Promise((success) => {
        //Check if ID already exists in database
        exists(ID).then(() => {
            return createRoom()
        }).catch(() => {
            success(ID)
        });
    });
}

function exists(ID) {
    return new Promise((resolve, reject) => {
        database.ref('rooms').child(ID).once('value', snapshot => {
            if (snapshot.exists()) {
                resolve()
            } else {
                reject()
            }
        })
    })
}

您可以尝试以下方法:

let ID = database.collection('someCollection').doc().id;

这将创建一个唯一的ID

问题是,ID需要是一个长度为5的字符串,仅由大写字母和数字组成。您在问题上没有这样说。你应该加上这个限制。编辑:对不起,我现在在代码注释上看到了。也许你们可以把它放在tooOP使用实时数据库的代码之外,而你们的代码是用于CloudFireStore的。虽然这两个数据库都是Firebase的一部分,但它们是完全独立的,并且具有不同的API。您可以将ID字符串切割为5个字符,并使用函数“toUpperCase()”,非常确定这将允许冲突。例如,“FOOBA123”和“FOOBA789”是唯一的,但是通过将字符串切割为5个字符,它们就等同于相同的字符串。当您已经有承诺要处理时,使用
新承诺通常是一种不好的做法。直接使用这个承诺——不要用新的承诺来包装它。