Как я могу создать систему ожидания, пока не будет получен ответ в JS? - PullRequest
0 голосов
/ 14 октября 2018

Вот мой код:

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({ систему?


Примечание: Также я уверен, что данные (ответ)будут также возвращены.Потому что я добавил console.log() внутри UserAccountLogin службы, и она будет печатать возвращенные данные примерно через 2 секунды.

1 Ответ

0 голосов
/ 14 октября 2018

я думаю, что вы пропустили метод take, который вызывает вызов в вашей корневой функции takeLatest ("LOGIN", login) что-то в этом роде

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