我想我现在对生成器函数的概念感到困惑。
我记得生成器函数的工作方式是
在我们故意调用 iterator.next() 之前,不会调用下一个 yield。
例如:
function* testing () {
yield 1;
yield 2;
yield 3;
}
const iterator = testing();
我们只能通过 iterator.next() 获得 1、2 和 3 的值。
上面的理解就是我现在所拥有的。(希望这是正确的理解)
但是,当我这样做时
function* getUsers() {
try {
const result = yield call(api.getUser);
yield put(actions.getUsersSuccess({
items: result.data.data
}));
console.log(result);
yield 1;
yield 2;
yield 3;
console.log("15");
} catch(e) {
}
}
当我启动应用程序时,它会调度 getUsersRequest,然后 Saga Watcher 接收此操作,然后调用工作人员 getUsers。(希望这也是正确的理解)
代码在这里
class App extends Component {
constructor(props) {
super(props);
**this.props.getUsersRequest();**
}
handleSubmit = ({firstName, lastName}) => {
this.props.createUserRequest(firstName, lastName);
};
render() {
const users = this.props.users;
return (
<div style={{margin: '0 auto', padding: '20px', maxWidth: '600px'}}>
<NewUserForm onSubmit = {this.handleSubmit}/>
<UserList users = {users.items}/>
</div>
);
}
}
function* watchGetUsersRequest() {
yield takeEvery(actions.Types.GET_USERS_REQUEST, getUsers);
}
我的问题是为什么在控制台中我们可以看到 console.log("15")?
我们从不故意调用 getUser.next()。
感谢您的友好回复和帮助!
你可以看到 Saga 和 App 的实现 https://github.com/Oliverlee1003/SagaList/blob/main/src/sagas/users.js https://github.com/Oliverlee1003/SagaList/blob/main/src/组件/App.js