簡體   English   中英

如何使用 React-Thunk 調用生成器函數

[英]How to call generator functions with React-Thunk

我正在將一些 sagas 轉換為 thunk。 其中一些 sagas 具有我無法在 thunk 中調用的嵌套生成器函數。 通常在傳奇中我會這樣做:

 const result = yield call(myFunction, anotherSaga, params);

但是,當我嘗試將其轉換為 thunk 時:

export const myAction = createAsyncThunk(
  'myAction',
  async (data: Payload, { dispatch, getState }) => {

     const result = myFunction(anotherSaga, params).next().value;

     console.log(result)
})

console:
    @@redux-saga/IO: true
    combinator: false
    payload: {context: null, args: Array(2), fn: ƒ}
    type: "CALL"

我沒有得到任何可用的東西,因為anotherSaga有嵌套的傳奇。 如何將其轉換為 thunk function?

您不能直接從 thunk 調用 saga,sagas 使用的效果需要由 saga 庫處理。

一些可能的解決方法:

a) 甚至將嵌套的 saga 轉換為非生成器 function

b) 如果結果不重要,您可以用調度代替call ,然后在調度此類操作時使用takeEvery效果調用傳奇

c) 我不推薦這樣做,但在技術上可以使用 saga 中間件實例運行 saga

export const myAction = createAsyncThunk(
  'myAction',
  async (data: Payload, { dispatch, getState }) => {
     const task = sagaMiddleware.run(anotherSaga, params)
     const result = await task.toPromise()
     console.log(result)
})

暫無
暫無

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

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