1

Redux-Promise说: 如果它收到一个 Promise,它会派发这个 Promise 的解析值。如果 Promise 被拒绝,它不会发送任何东西。

但是当我运行下面的代码并故意做一些事情来让承诺在行动中被拒绝时,我在reducer上也得到了被拒绝的承诺!它不应该被发送到减速器吗?请不要只告诉我解决方法,而是告诉我当 Redux-Promise 这么说时为什么会发生这种情况。

行动:

  const responce = axios.get(API_URL);  
  console.log(responce);
    return (
        {
            type: FETCH_WEATHER,
            payload: responce,
        }
    );

答案^是: 在此处输入图像描述

减速器:

   export default (state = initalState, action) => {

        switch (action.type) {
            case FETCH_WEATHER:
            console.log(action.payload);
                return (
                    [action.payload.data, ...state]
                );
            default: return (state);
        }
    }

action.payload ^ 是:

在此处输入图像描述

4

1 回答 1

1

重复造句:

如果它收到一个 Promise,它将发送该 Promise 的已解决值。如果 Promise 被拒绝,它不会发送任何东西。

如果它收到一个 Flux 标准动作,其有效载荷是一个承诺,它要么

  • 使用 promise 的已解析值发送操作的副本,并将状态设置为成功。
  • 使用 promise 的拒绝值发送操作的副本,并将状态设置为错误。

所以,有两种不同的方式来使用这个中间件:

// dispatch a promise directly
dispatch(somePromise);

// dispatch a promise as an action payload
dispatch({type : "SOME_ACTION", payload : somePromise})

“如果 promise 拒绝,将不发送任何东西”短语指的是第一个用法 - 将 promise 直接传递给dispatch(). 您正在以第二种方式使用它 - 将承诺作为有效负载传递。

于 2018-03-08T16:47:04.727 回答