サガに遅延を導入したい(redux-sagaを使用)。
これどうやってするの?
Redux-sagaがAPIを提供する場合、私はそれを手動で実現する方法にも興味があります。
function* save({ payload }) {
yield put(pending());
// I want to simply wait (non-blocking) here for say 2 seconds
yield put(complete());
}
Redux-sagasには 特別な効果 があります:
delay(ms、[val])
Msミリ秒後にvalで解決されるPromiseを返します。
例:
import { delay, call } from 'redux-saga/effects'
function* someSaga(input) {
yield put(someAction())
yield delay(500)
yield put(anotherAction())
}
あなたは約束とジェネレーター関数でそれを達成することができます:
function sleep(sec) {
return new Promise(resolve => setTimeout(resolve, sec*1000));
}
function* save({ payload }) {
yield put(pending());
yield sleep(2); //wait 2 seconds
yield put(complete());
}
ソース 。
export function delay(ms, val = true) {
let timeoutId
const promise = new Promise(resolve => {
timeoutId = setTimeout(() => resolve(val), ms)
})
promise[CANCEL] = () => clearTimeout(timeoutId)
return promise
}