2017-05-15 33 views
0

是否有可能通過thunk傳遞異步「響應」?下面給出了行動的創建者:傳遞異步響應「通過」thunk

export function emitLoadPlot(json_req) { 
    return function (dispatch) { 
    axios.post(URI, { 
     json_req 
    }) 
    // .then(() => dispatch(
    // emitTxRxAlert("yellow", "Received plot from server") 
    //)) 
    .then((response) => dispatch({ 
     type: EMIT_PLOT_DATA_REQ, 
     payload: response 
    })) 
    .then(() => dispatch(
     emitTxRxAlert("green", "Loaded plot model") 
    )) 
    .then(() => dispatch({ 
     type: EMIT_LOAD_PLOT 
    })) 
    .then(() => dispatch({ 
     type: EMIT_VIEW_STATUS 
    })) 
    }; 
} 

如果我取消警報調度response從來沒有這使得它需要的地方。說得通。這些調用中的一些(以及在客戶端上的操作)需要很長時間才能完成,並且我希望在異步請求在瀏覽器中返回時以及何時將其加載到redux存儲區之間插入客戶端UI警報(比如說)。在這臺速度慢的筆記本電腦上,網絡請求比處理response花費的時間要少很多。

有沒有什麼辦法讓我通過response(或參考response)通過上面的第一個thunk?

回答

1

調用then()會返回您的回調結果的承諾。

你的回調返回任何dispatch()返回,這不是你想要的值。

相反,你需要返回原來的價值:

.then(response => { 
    dispatch(...); 
    return response; 
}) 
+0

我既愛又恨它時,答案是如此簡單我必須錯過它白癡。謝謝。 – Omortis