web-dev-qa-db-ja.com

リドゥサガで待っている

サガに遅延を導入したい(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());
}
7
Ben Aston

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())
}
14
Cleiton

あなたは約束とジェネレーター関数でそれを達成することができます:

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());
}
1
NullDev

ソース

export function delay(ms, val = true) {
  let timeoutId
  const promise = new Promise(resolve => {
    timeoutId = setTimeout(() => resolve(val), ms)
  })

  promise[CANCEL] = () => clearTimeout(timeoutId)

  return promise
}
0
52d6c6af