Какова функциональность действий избыточного промежуточного ПО? - PullRequest
0 голосов
/ 16 октября 2019

Промежуточное программное обеспечение в Redux определяется сигнатурой

const middleware = store => next => action => {}

Какое определение действий и как они должны создаваться?

Я хотел создать новое промежуточное ПО дляобработка асинхронных действий, где действия могут содержать инструкции для побочного эффекта, а также действие для отправки в случае успеха. Я установил свое промежуточное программное обеспечение следующим образом:

const effectMiddleware = store => next => async (action) => {
    // Assert it's actually a command
    if (action.command !== undefined) {
        next(action)
        const result = await Cmd.execute(action.command) // returns a redux action
        return store.dispatch(result)
    else {
        next(action)
    }
}

Однако я столкнулся со странными ошибками, когда следующее действие не было выполнено. Я обнаружил, что на самом деле «действия» промежуточного программного обеспечения не совпадают с действиями, которые вы определяете в своем приложении. Используя консольный журнал, я обнаружил, что действие в промежуточном программном обеспечении на самом деле

action: Object { type: "MY_ACTION", payload: {} }
​
stack: undefined
​
timestamp: 1571214156244
​
type: "PERFORM_ACTION"

, поэтому он не выполнил действие, возвращаемое Cmd.execute. Мне удалось обойти это путем создания функции wrapAction:

const wrapAction = (action) =>
    ({ action: action, type: "PERFORM_ACTION", stack: undefined, timestamp: new Date().valueOf() })

const effectMiddleware = store => next => async (action) => {
    // Assert it's actually a command
    if (action.action.command !== undefined) {
        next(action)
        const result = await Cmd.execute(action.action.command) // Cmd.execute returns a Promise<redux action>
        return store.dispatch(wrapAction(result))
    else {
        next(action)
    }
}

Однако я нигде не могу найти документацию по этому вопросу, и поэтому мой вопрос: как на самом деле используется промежуточное программное обеспечение? Какой официальный способ «обернуть» действия в эти действия промежуточного программного обеспечения?

1 Ответ

1 голос
/ 16 октября 2019

Причина, по которой это происходит, из-за избыточных devtools! Когда вы используете несколько промежуточных программ, резервный devtools всегда должен быть последним.

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