簡體   English   中英

redux-saga 中的“調用”助手(效果)函數如何返回解析值而不是承諾?

[英]How "call" helper(effect) function in redux-saga return the resolved value instead a promise?

我不明白 call 方法的機制是什么,它應該自然產生一個承諾,而是返回該承諾的解析值。

第 14 行👇:

import { put, call, takeLatest } from "redux-saga/effects";
import * as api from "./api";
//generate watchers
function* rootSaga() {
  //define watcher
  yield takeLatest("FETCH_TASKS_STARTED", fetchTasks);
}
//watcher is subProgram.They are executed when an particular action of the dispatched
function* fetchTasks() {
  try {
    yield put({
      type: "REQUEST_STARTED",
    });
    const { data } = yield call(api.fetchTasks);
    yield put({
      type: "FETCH_TASKS_SUCCEED",
      payLoad: { tasks: data },
    });
  } catch (e) {
    yield put({
      type: "REQUEST_FAILED",
      payLoad: { error: e.message },
    });
  }
}
export default rootSaga;

調用效果的源代碼可以在這里找到

調用效果首先調用您要求它調用的任何內容,然后檢查返回的內容。 如果您返回一個承諾(例如,如果您使用帶有異步函數的call ),它會通過一個名為resolvePromise的輔助函數等待該承諾解決。 resolvePromise 基本上只是在 promise 上調用.then ,並傳入一個回調。 回調是知道如何恢復 saga 的函數,它將通過調用.next()來完成。

如果您返回一個迭代器(例如,如果您將call與 saga 一起使用),它將控制權交給proc函數,該函數負責運行 sagas。 該代碼還在這一行檢查承諾並等待它們解決

暫無
暫無

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

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