簡體   English   中英

無法在 then 方法中調用 function

[英]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);
    }
}

確保在 function 調用中都返回 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.");
    })
}

檢查控制台中的任何錯誤。 如果沒有,兩個調用都通過了。

嘗試使用此代碼。

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);

返回的 function 必須是 javascript Promise才能使用.then

您可以嘗試console.log(auth.createUserWithEmailAndPassword)是否是 Promise。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM