No entiendo cuál es el mecanismo del método de llamada y que, naturalmente, debería generar una promesa, sino devolver el valor resuelto de esa promesa.
línea 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;El código fuente para el efecto de llamada se puede encontrar aquí
El efecto de llamada comienza llamando a lo que le pediste que llame, luego verifica lo que se devolvió. Si devuelve una promesa (por ejemplo, si usa una call con una función asíncrona), espera a que se resuelva esa promesa, a través de una función auxiliar llamada resolvePromise . resolvePromise básicamente solo llama .then en la promesa, pasando una devolución de llamada. La devolución de llamada es la función que sabe cómo reanudar la saga, lo que hará llamando a .next() .
Si devuelve un iterador (por ejemplo, si usa call con una saga), le entrega el control a la función proc , que es la función responsable de ejecutar las sagas. Ese código también busca promesas y espera a que se resuelvan, en esta línea