如何在JS中创建一个等待-等待-响应-返回系统?

时间:2018-10-14 16:10:30

标签: javascript reactjs ecmascript-6

这是我的代码:

import { routerRedux } from 'dva/router';
import { stringify } from 'qs';
import { UserAccountLogin, getFakeCaptcha } from '@/services/api';
import { setAuthority } from '@/utils/authority';
import { getPageQuery } from '@/utils/utils';
import { reloadAuthorized } from '@/utils/Authorized';

export default {
  namespace: 'login',

  state: {
    status: undefined,
  },

  effects: {
    *login({ payload }, { call, put }) {
      const response = yield call(UserAccountLogin, payload);
      yield put({
        type: 'changeLoginStatus',
        payload: response,
      });
    },
  },

  reducers: {
    changeLoginStatus(state, { payload }) {
      console.log(payload);                               --     undefined
      setAuthority(payload.currentAuthority);
      return {
        ...state,
        status: payload.status,
        type: payload.type,
      };
    },
  },
};

正如我在上面的代码中评论的那样,显然console.log()将作为第一行执行,因此它总是抛出undefined

据我所知,首先要执行effects,然后将响应传递给reducers。但是我的代码不会等到响应返回。无论如何,我如何才能等到const response = yield call(UserAccountLogin, payload);完成并执行yield put({系统?


注意:另外,我也肯定会返回数据(响应)。因为我在console.log()服务中添加了UserAccountLogin服务,它也会在大约2秒钟后打印返回的数据。

1 个答案:

答案 0 :(得分:0)

我认为您错过了take方法,这会触发根函数中的调用 takeLatest(“ LOGIN”,登录) 像这样的东西