объясните пожалуйста: при проверке runSaga необязательно, аргумент saga должен быть функцией Generator - PullRequest
1 голос
/ 30 марта 2019

Я слежу за учебником по pluralsight, который представляет собой учебник по полному стеку реакции / редукции, и я создаю файл saga.mock.js со следующим кодом.

с ним я незнаком.и был бы признателен и объяснил, чтобы я мог понять это.

import { take, put, select } from 'redux-saga/effects';
import * as mutations from './mutations';
import uuid from 'uuid';

export default function* taskCreationSaga(){
    while (true) {
            const {groupID} = yield take(mutations.REQUEST_TASK_CREATION);
            console.log("Got group ID", groupID);
    }
}

, затем в index.js моего магазина я добавил нижний код в звездочках **

import { createStore, applyMiddleware } from 'redux';
import { defaultState } from '../../server/defaultState';
import { createLogger } from 'redux-logger';
import createSagaMiddleware from 'redux-saga';

const sagaMiddleware = createSagaMiddleware();
import * as sagas from './sagas.mock'

export const store = createStore(
    function reducer(state = defaultState, action) {
        return state;
    },
    **applyMiddleware(createLogger(), sagaMiddleware)
);

for (let saga in sagas) {
    sagaMiddleware.run();
}**

и получил следующееошибка: «uncaught at check runSaga (storeInterface, saga, ... args): аргумент saga должен быть функцией генератора!»

Я решил эту проблему, изменив это:

for (let saga in sagas) {
    sagaMiddleware.run();
}

на это:

for (let saga in sagas) {
    sagaMiddleware.run(sagas[saga]);
}

1 Ответ

1 голос
/ 30 марта 2019

Метод run () должен получить массив саг (каждая из которых является функцией генератора), каждый из которых возвращает объект генератора.Таким образом, промежуточное ПО может обрабатывать асинхронные процедуры, следуя упорядоченной последовательности операций, вызывая следующую в каждой саге, которая также может запускать другие саги.

Я также искал объяснение этому и нашел его в документах redux-saga : (здесь более подробно объясняется использование run ())

На первой итерации промежуточное программное обеспечение вызывает метод next () для получения следующего эффекта.Промежуточное программное обеспечение затем выполняет полученный эффект, как указано в API эффектов ниже.Тем временем Генератор будет приостановлен до тех пор, пока выполнение эффекта не прекратится.После получения результата выполнения промежуточное программное обеспечение вызывает следующий (результат) в Генераторе, передавая ему полученный результат в качестве аргумента.Этот процесс повторяется до тех пор, пока Генератор не завершится нормально или не выдаст какую-либо ошибку.

Если выполнение приводит к ошибке (как указано каждым создателем Эффектов), тогда вызывается метод throw (ошибка) Генератора.Если функция Generator определяет try / catch, окружающий текущую инструкцию yield, то блок catch будет вызываться базовой средой исполнения Generator.Среда выполнения также будет вызывать любой соответствующий блок finally.

В случае отмены саги (либо вручную, либо с использованием предоставленных эффектов), промежуточное ПО будет вызывать метод return () генератора.Это заставит Генератор перейти непосредственно к блоку finally.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...