2017-02-17 45 views
20

我竭力要弄清楚的問題有以下語法等待是異步函數內部保留字錯誤

export const sendVerificationEmail = async() => 
    (dispatch) => { 
    try { 
     dispatch({ type: EMAIL_FETCHING, payload: true }); 
     await Auth.sendEmailVerification(); 
     dispatch({ type: EMAIL_FETCHING, payload: false })) 
    } catch (error) { 
     dispatch({ type: EMAIL_FETCHING, payload: false }); 
     throw new Error(error); 
    } 
    }; 

我不斷收到錯誤說

等待被保留字

但在異步函數內是否合法?

調度位從react-thunk

+1

它不在異步函數中。它在以'(dispatch)=>'開頭的函數中,而且不是異步的。爲什麼你有'sendVerificationEmail'返回另一個函數而不是執行一些操作? – JLRishe

+1

@JLRishe確實需要'async(dispatch)=>'您可以將其作爲答案發布,我需要返回以便獲得調度 – Ilja

+0

http://www.2ality.com/2016/10 /async-function-tips.html –

回答

37

來爲了使用await,功能直接封閉它需要異步。根據您的意見,增加async到內部功能修復它,所以我會張貼在這裏:

export const sendVerificationEmail = async() => 
    async (dispatch) => { 
    try { 
     dispatch({ type: EMAIL_FETCHING, payload: true }); 
     await Auth.sendEmailVerification(); 
     dispatch({ type: EMAIL_FETCHING, payload: false })) 
    } catch (error) { 
     dispatch({ type: EMAIL_FETCHING, payload: false }); 
     throw new Error(error); 
    } 
    }; 

可能的話,你可以從外部函數刪除async因爲它不包含任何異步操作,但這取決於該sendVerificationEmail的調用者是否期望sendVerificationEmail是異步的。

+2

事實上,不需要外部異步 – Ilja