我正在尝试在另一个函数中调用两个函数
通用服务组件
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 方法返回并链接,但仍然无法正常工作,我还缺少什么?
答案 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)
是否是一个承诺。