2017-05-24 40 views
1

我正在使用傳奇,我試圖實現takeEvery和超時之間的競賽。如果用戶沒有執行操作,我想發送DISMISS操作(超時)。但是如果用戶已經完成了操作,我不想發送DISMISS操作。我們可以用takeEvery使用種族嗎?

我沒有成功,所以我的問題是,我可以用takeEvery做比賽嗎?

const id = 5 // just for the example 
const {a, b} = yield race({ 
    a: yield takeEvery(DISMISS, function* ({payload}) { 
    if (payload === id) { 
     // find a way to win the race 
    } 
    // continue to listen 
    }), 
    b: yield call(delay, 6000), 
}) 

回答

1

我發現你不應該使用takeEvery但使用普通電話用,而解決方案:

答案:

const {timeout} = yield race({ 
    _: call(yourFunction$, param), 
    timeout: call(delay, alertDelay), 
}) 

有:

function* yourFunction$(param) { 
    let yourCond = true 
    while (yourCond) { 
    const action = yield take(YOUR_ACTION_TYPE) 
    // do what you want 
    } 
} 
相關問題