Разница между вашими двумя фрагментами заключается в том, что во втором примере async/await
вы не подписываетесь на магазин до тех пор, пока после вы не получите цели и задачи, тогда как в первом выподписывайтесь немедленно.
Так что ваш второй пример не работает, так как теперь вы гарантировали, что
store.dispatch(receiveDataAction(todos, goals))
вызывается раньше
store.subscribe(() => this.forceUpdate())
, и так как действие имеетк этому моменту уже был отправлен обратный вызов подписки.
Чтобы исправить это, вы можете просто захотеть переместить часть подписки так, чтобы она происходила до вызова await
.Таким образом, вы уже подписаны до того, как обещание будет выполнено.Вот как то так:
async componentDidMount() {
const { store } = this.props
// Move to the front so this happens before the await.
store.subscribe(() => this.forceUpdate())
const [todos, goals] = await Promise.all([
API.fetchTodos(),
API.fetchGoals(),
])
store.dispatch(receiveDataAction(todos, goals))
console.log('test')
}