无法在then方法内调用函数

时间:2020-07-29 03:56:53

标签: javascript reactjs es6-promise

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

通用服务组件

awk ... sed

注册组件

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。我也尝试过通过 then 方法返回并链接,但仍然无法正常工作,我还缺少什么?

3 个答案:

答案 0 :(得分:1)

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

检查控制台中是否有错误。如果没有,则两个电话都通过。

答案 1 :(得分:0)

尝试使用此代码。

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

答案 2 :(得分:0)

return auth.createUserWithEmailAndPassword(user.email,user.password);

返回函数必须是JavaScript Promise ,才能使用。然后

您可以尝试console.log(auth.createUserWithEmailAndPassword)是否是一个承诺。