Ошибка, похоже, что обещание пропало при использовании redux-pack

Я новичок в использовании redux-pack, но мне нравится то, как обещанный подход действительно очищает код и делает каждый шаг очень понятным. Однако я столкнулся с проблемой, когда обещание, кажется, исчезает, и возникает ошибка. Мой код выглядит следующим образом:

actions.js

import * as types from './action_types';
import * as services from '../services';

export const login = (email, password) ({type: types.LOGIN, promise: services.login(email, password)});

services.js

const checkResponse = (response) => {
    if (response.ok) {
        return response;
    } else {
        let error = new Error(response.statusText);
        error.response = response;
        throw error;
    }
};

export const login = (email, passowrd) => {
    let request = new Request('/login', {method: 'POST', body: {email: email, password: password}});

    return fetch('/login', request)
        .then(checkResponse)
        .then(response => response.json())
        .catch(error => error);
};

reducer.js

import handle from 'redux-pack';
import * as actions from '../actions';

const INITIAL_STATE = {
    loggedin: false,
    isworking: false,
    err: null,
};

export default function reducer(state = INITIAL_STATE, action) {
    const { type, payload } = action;

    switch (type) {

    case actions.LOGIN:
        return handle(state, action, {
            start: prevState) => ({...prevState, isworking: true, err: null}),
            finish: prevState => ({ ...prevState, isworking: false }),
            failure: prevState => ({ ...prevState, err: payload }),
            success: prevState => ({ ...prevState, loggedin: payload.ok })
        });
    default:
        return state;
    }
}

Однако, когда я запускаю этот код, я получаю следующую ошибку при запуске действия:

TypeError: Object is not a function (near '...(0, _reduxPack2.default)...')

Я оснастил код выводом на консоль и увидел, что следующие шаги выполняются непосредственно перед ошибкой:

[Log] Login login, called +0ms (client.js, line 7245)
[Log] Login props = {"match":{"path":"/login","url":"/login","isExact":true,"params":{}},"location":{"pathname":"/login","state":{"from":"/authRoute"},"search":"","hash":"","key":"6gnu0d"},"history":{"length":72,"action":"REPLACE","location":{"pathname":"/login","state":{"from":"/authRoute"},"search":"","hash":"","key":"6gnu0d"}},"isworking":false,"loggedin":false,"err":null} +1ms (client.js, line 7245)
[Log] Login mapDispatchToProps, login dispatched. +0ms (client.js, line 7245)
[Log] actions login, called +0ms (client.js, line 7245)
[Log] services login, called. +0ms (client.js, line 7245)
[Log] actions promise = [object Promise] +2ms (client.js, line 7245)
[Log] actions action = {"type":"LOGIN","promise":{}} +0ms (client.js, line 7245)
[Log] reducer reducer called +4s (client.js, line 7245)
[Log] reducer state is: {"loggedin":false,"isworking":false,"err":null} +0ms (client.js, line 7245)
[Log] reducer action type is: "LOGIN" +0ms (client.js, line 7245)
[Log] reducer action promise is: undefined +0ms (client.js, line 7245)
[Log] reducer action payload is: undefined +0ms (client.js, line 7245)

У меня также был ожидаемый результат в функции запуска в редукторе, который так и не был вызван. В приведенном выше «Логине» находится компонент React, и я вижу, что он выполняет вызов, реквизиты имеют ожидаемое состояние и отправляется вызов входа в систему. Затем я вижу, как действие вызывает службу, получает сгенерированное обещание и создает полное действие. Вызывается редуктор, и состояние выглядит так, как ожидалось, тип действия такой, как ожидалось, но часть обещания действия не определена, я подозреваю, что это может быть причиной того, что вызов обработчика пакета реакции выдает ошибку. Любые предложения о том, что попробовать или где посмотреть, приветствуются!

Я решил тщательно выполнить все действие в редукторе, чтобы увидеть, что у меня было (вместо того, чтобы смотреть на несколько частей), и что я вижу: [Журнал] действие редуктора: {"type": "LOGIN", "meta": { "redux-pack / LIFECYCLE": "start", "redu‌ x-pack / TRANSACTION": ‌ "893be9d0-6634-4e5e-‌ b54f-7d4ce625eedb"}} + 0 мс (client.js, строка 7247) Как ни странно Я не вижу обещания, которое я видел в предыдущем действии!

JSDevGuy 11.06.2018 02:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
165
1

Ответы 1

Я считаю, что ваше обещание теряется при броске checkResponse. Убедитесь, что вместо этого он возвращает отклоненное обещание, как показано ниже:

const checkResponse = (response) => {
    if (!response.ok) {
      let error = new Error(response.statusText);
      error.response = response;
      return Promise.reject(error);
    }
    return response;
};

Привет, Гильерме, хорошее предложение. Я пробовал это, и код гораздо более согласован с ожидаемым поведением Promise, поэтому я сохраню изменение кода, но все равно столкнусь с той же проблемой :( Это как будто где-то между действием и редуктором обещание лишено ?? !!

JSDevGuy 09.06.2018 09:14

Другие вопросы по теме