Dva: 两个effect 先后执行,第一个effect的then不执行

Created on 1 Mar 2018  ·  7Comments  ·  Source: dvajs/dva

Code to reproduce the issue: (请提供可复现的代码或者步骤)

import test from './request/test';

// 定义一个model
export default {
  namespace: 'test',
  effects: {
    * request({ value }, { put, call }) {
      const result = yield call(test, value);

      return result;
    },
  },
};

// 在view 调用
import React from 'react';
import { connect } from 'dva';

function Test(props) {
  const { dispatch } = props;
  function test(value) {
    dispatch({ type: 'test/request', value }).then(() => {
       console.log(value);
    })
  }

  return (
    <div>
      <button onClick={() => test('a')}>a</button>
      <button onClick={() => test('b')}>b</button>
    </div>
  );
}

export default connect()(Test);

Expected behavior: (预期的正常效果)

ab依次点击,请求成功后分别打印出ab

Actual behavior: (实际效果)

a请求没成功返回前点击b,那么athen方法会失效,也就是不执行。

Versions of packages used: (哪个库的哪个版本出现的问题)

dva: 2.0.3

Most helpful comment

我也遇到这个问题了,看来不只我一个人

All 7 comments

@jinyang1994 该问题存在,关联 #1368 ,有两个提交 PR #1367 ,我自己提交的 PR #1493 中的一次提交也是修复这个问题。

谢谢,现在是使用callback的方式暂时解决了问题,但是风格跟规范有点不符。希望作者可以快点merge

我也遇到这个问题了,看来不只我一个人

@jinyang1994 不是,作者最近忙着开发 umi ,工作负担比较重,开源不易。

同问,大家有什么好的方式处理吗?我现在只能写多个名字不一样的 effect 来处理,希望作者能早点解决 @sorrycc

@appLhui 你可以传递callback暂时解决一下。

It's fixed in the master branch, will be released in the next version.

Was this page helpful?
0 / 5 - 0 ratings