首页 > 解决方案 > 无法在 then 方法中调用函数

问题描述

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

公共服务组件

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方法返回和链接,仍然无法正常工作,我错过了什么?

标签: javascriptreactjses6-promise

解决方案


尝试以下操作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);
    }
}

确保在两个函数调用中都返回一个 Promise。如果返回值不是 Promise,则使用以下代码将其包装在 Promise 中

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.");
    })
}

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


推荐阅读