Для выполнения асинхронного dispatch в Redux можно использовать middleware, такой как redux-thunk или redux-saga. В данном случае, если вы используете redux-saga, вы можете использовать эффект `call`, чтобы вызвать `updateProductSuccess` или `updateProductError` в саге и дождаться их выполнения перед вызовом `onClose`.
Пример кода:
```javascript
import { call, put, takeEvery } from 'redux-saga/effects';
function* updateProduct(action) {
try {
// Вызов updateProductSuccess
const result = yield call(updateProductSuccess, action.payload);
yield put({ type: 'UPDATE_PRODUCT_SUCCESS', payload: result });
} catch (error) {
// Вызов updateProductError
yield put({ type: 'UPDATE_PRODUCT_ERROR', error });
}
}
function* onClose() {
console.log('onClose функция вызвана');
}
function* submitHandler(action) {
yield call(updateProduct, action);
yield call(onClose);
}
function* rootSaga() {
yield takeEvery('SUBMIT_PRODUCT', submitHandler);
}
export default rootSaga;
```
Если вы хотите, чтобы `onClose` вызывалась только после завершения выполнения `updateProductSuccess` или `updateProductError`, то просто поместите вызов `onClose` внутрь `submitHandler` после выполнения `updateProductSuccess` или `updateProductError` с помощью `yield call()`. В таком случае, `onClose` будет вызываться только после успешного или неуспешного обновления продукта.