2017-08-14 74 views
4

我試圖將異步/等待語法併入我的Redux操作中,但出於某種原因,它不起作用。我不能爲我的生活看到以下的錯誤:等待關鍵字在Redux動作中不起作用

const actions = { 
    load: async (staff, date) => dispatch => { 
     const data = { 
      dateFrom: date, 
      dateTo: date, 
      person: staff, 
      personType: 'staff' 
     }; 

     const events = utils.getDataPromise('json/events/load', data); 
     const classes = utils.getDataPromise('json/timetable/load', data); 

     dispatch({ 
      type: actions.MYDAY_LOAD, 
      staff, 
      date: date || new Date(), 
      events: await events, 
      classes: await classes 
     }); 
    }, 
} 

utils函數肯定會返回一個承諾。

+0

你使用thunk嗎? – Isaac

+0

@isaac是的,我正在使用thunk。我得到的錯誤是'await'關鍵字 - 即使我的IDE告訴我他們錯了。 –

+1

'load'是一個異步函數,它返回一個非異步函數,在'dispatch'之前移動你的異步函數。檢查這[問題](https://stackoverflow.com/questions/42489918/async-await-inside-arraymap) – Gerardo

回答

6

這是由於箭頭函數語法造成的常見錯誤。

您的load功能是async,但返回匿名箭頭功能dispatch => {...}

await只有當它是一個async函數內部和await電話是內部的匿名返回函數,而不是async這就是爲什麼它不工作的作品。在dispatch之前移動async,這應該起作用。

const actions = { 
    load: (staff, date) => async dispatch => {...} 
    //      ^^^^^ move it here 
... 
}