2017-08-22 173 views
1

我遇到了一個問題,即在執行傳奇期間我的UI被阻塞了一秒鐘。我試圖讓我的傳奇無阻,看起來就是這樣。它完成得非常快。爲什麼我的派遣阻塞,直到傳奇完成?如何發送非阻塞

//Saga 
function* test(action) { 
    console.time('test') 
    yield put({type : 'test'}); 
    console.timeEnd('test') 
} 

function* changeFilterSaga(action) { 
    console.time('changeFilterSaga') 
    yield* test(test, action); 
    console.timeEnd('changeFilterSaga') 
} 

export default function* watchChangeFilter() { 
    yield takeLatest(FILTER_MYNDIGHET, changeFilterSaga); 
} 


//dispatch action 
filterData: ({ apply, filter }) => { 
    console.time('filterData') 
    dispatch(changeFilter({ apply, filter })); 
    console.timeEnd('filterData') // everything blocks until I am here 
} 

回答

0

呼叫yield* test(test, action);實際上是阻塞的。這與yield call(test, action)相同。爲了使這個通話非阻塞,你需要分叉它:yield fork(test, action)