簡體   English   中英

在 redux-saga 中等待

[英]Waiting in a redux-saga

我想在傳奇中引入延遲(使用 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-saga 對此有特殊效果

延遲(毫秒,[val])

返回將在 ms 毫秒后使用 val 解析的 Promise。

例子:

import { delay, call } from 'redux-saga/effects'

function* someSaga(input) {
  yield put(someAction())
  yield delay(500)
  yield put(anotherAction())
}

你可以通過一個 promise 和一個生成器函數來實現:

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
}

使用從 redux-saga/effects 導入的延遲可以一次性解決您的問題

暫無
暫無

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

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