Dva框架是基于redux-saga的,它把effects都整到了一起,使代码看起来更整洁。
const Model = {
namespace: 'XXX',
state: {},
effects: {
*a(){}
},
reducers: {
}
}
网上也有提到使用put在effect中调用其他effect,例如
*a(_, { put }){
console.log('before');
yield put({type: 'b', payload: {parameter1, parameter2}});
console.log('after');
},
*b({payload: {parameter1, parameter2}}, { call }){
console.log('inner');
yield call(service1);
}
但这种做法确是非阻塞的,你会发现控制台中打印出来会是
before
after
inner
于是便有人提出使用take来进行阻塞
*a(_, { put, take }){
console.log('before');
yield put({type: 'b', payload: {parameter1, parameter2}});
yield take('b/@@start')
yield take('