Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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函数承诺未定义类型错误_Javascript_Node.js_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript Firebase函数承诺未定义类型错误

Javascript Firebase函数承诺未定义类型错误,javascript,node.js,firebase,firebase-realtime-database,Javascript,Node.js,Firebase,Firebase Realtime Database,我目前正在使用firebase函数从数据库调用以下文档: let token, userId; db.doc(`/users/${newAccount.username}`) .get() .then((doc) => { if (doc.exists === false) { return firebase.auth().createUserWithEmailAndPassword(newAccount.email, newAcco

我目前正在使用firebase函数从数据库调用以下文档:

let token, userId;
db.doc(`/users/${newAccount.username}`)
    .get()
    .then((doc) => {
        if (doc.exists === false) {
            return firebase.auth().createUserWithEmailAndPassword(newAccount.email, newAccount.password).catch(err => console.error(err));
        } else {
            res.status(400).json({ username: 'this username is already taken' });
        }

    })

    .then(data => {
        userId = data.user.uid;
        return data.user.getIdToken();
    })

    .then((idToken) => {
        token = idToken;
        const userCredentials = {
            username: newAccount.username,
            email: newAccount.email,
            created: new Date().toISOString(),
            userId
        };
        return db.doc(`/users/${newAccount.username}`).set(userCredentials);

    })

    .then(() => {
        return res.status(201).json({ token });
    })
    .catch((err) => {
        console.error(err);
        if (err.code === 'auth/email-already-in-use') {
            return res.status(400).json({ email: 'Email is already is use' });
        } else {
            return res.status(500).json({ general: 'Something went wrong, please try again' });
        }
    });
TypeError: Cannot read property 'user' of undefined
代码运行正常,但如果数据库中存在文档,则会记录错误:

let token, userId;
db.doc(`/users/${newAccount.username}`)
    .get()
    .then((doc) => {
        if (doc.exists === false) {
            return firebase.auth().createUserWithEmailAndPassword(newAccount.email, newAccount.password).catch(err => console.error(err));
        } else {
            res.status(400).json({ username: 'this username is already taken' });
        }

    })

    .then(data => {
        userId = data.user.uid;
        return data.user.getIdToken();
    })

    .then((idToken) => {
        token = idToken;
        const userCredentials = {
            username: newAccount.username,
            email: newAccount.email,
            created: new Date().toISOString(),
            userId
        };
        return db.doc(`/users/${newAccount.username}`).set(userCredentials);

    })

    .then(() => {
        return res.status(201).json({ token });
    })
    .catch((err) => {
        console.error(err);
        if (err.code === 'auth/email-already-in-use') {
            return res.status(400).json({ email: 'Email is already is use' });
        } else {
            return res.status(500).json({ general: 'Something went wrong, please try again' });
        }
    });
TypeError: Cannot read property 'user' of undefined
我想这个承诺还在履行,我有点纠结于如何结束它


任何帮助都将不胜感激。谢谢。

您的第二个
回调将在所有情况下被调用。在第一次回调中发送400响应实际上不会阻止承诺传播到以下所有
然后
回调

如果要停止
然后执行
回调链,则应该抛出一个错误,由链下的
catch
捕获,跳过所有
然后