繁体   English   中英

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

[英]How can I create a wait-until-response-come-back system in JS?

这是我的代码:

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

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


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

我认为您错过了take方法,这会触发根函数takeLatest(“ LOGIN”,login)中的调用,类似这样

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM