无法在 then 方法中调用函数

Cannot call a function inside a then method

我试图在另一个函数中调用两个函数

公共服务组件

function AddEmail(user) {
    return auth.createUserWithEmailAndPassword(user.email,user.password);    
    //createUsers(user) this way of calling is working, but i don't want to invoke like this...
}

function createUsers(user) {
    return db.collection("users").add({
        firstName: user.firstName,
        lastName:  user.lastName,
        address:  user.address,
        phoneNumber:  user.phoneNumber,
        email:  user.email,
        role:  user.role,
    });
}

注册组件

submits(e) { 
    e.preventDefault();
    const { user} = this.state;
        
    commonService.AddEmail(user)
    .then(() => {
        commonService.createUsers(user)
        .then(() =>{//success})
        .catch(err=> console.log(err));
    })
    .catch(err=> console.log(err));
}

AddEmail 被执行,但 createUsers 没有执行。我也尝试通过 then 方法返回和链接,但仍然无法正常工作,我错过了什么?

使用 async / await 尝试以下操作。

async submit(e){
    e.preventDefault();
    const { user} = this.state;

    try {
        const userEmailAdded = await commonService.AddEmail(user);
        const userCreated = await commonService.createUsers(user);
    } catch (err) {
        console.log(err);
    }
}

确保 return 在两个函数调用中都做出承诺。如果 return 值不是承诺,请使用以下代码将其包装在承诺中

function AddEmail(user) {
    return new Promise((resolve, reject){
        const createdUser = auth.createUserWithEmailAndPassword(user.email,user.password);
        if(createdUser)
            return resolve(createdUser);
        else
            return reject("Error in creating user.");
    })
}

检查控制台中是否有任何错误。如果 none,两个调用都通过了。

尝试使用此代码。

submits(e) { 
    e.preventDefault();
    const { user} = this.state;
        
    commonService.AddEmail(user)
    .then(() => commonService.createUsers(user))
    .then(() =>{//success})
    .catch(err=> console.log(err));
}
return auth.createUserWithEmailAndPassword(user.email,user.password);

返回函数必须是 javascript Promise 才能使用 .then.

你可以试试console.log(auth.createUserWithEmailAndPassword)是不是Promise