Как асинхронно сбросить значения приставки

- Для начала извинения за неоднозначное название. Вопрос, который у меня возник, я действительно запутался, как поставить название. Я открыт для правок. По сути, я использую реактив-редукс, и у меня есть модальный режим, в котором я обновляю некоторое содержимое в базе данных. При обновлении я хочу, чтобы все состояние редуктора по умолчанию и закрытие модального. (Это просто, так как я запускаю функцию при обновлении, которая устанавливает все значения по умолчанию). Однако, при обновлении я хочу закрыть модальное окно и отобразить toastr при обновлении или сообщение об ошибке из ответа. Я настроил компоненты и действия для тостера.

Проблема в том, что toastr не отображает сообщение, потому что прежде чем оно сможет соответствовать постоянному действию из хранилища, редукторы для модального режима уже установлены по умолчанию. Каков наилучший подход для преодоления этого?

Modal.jsx

//update 
   updateConfig() {
            this.props.updateConfigNode(node, latestConfigData); //update action
            this.closeModal(); 
        }
    closeModal() {
        this.props.status(false); //Close modal
        this.props.update(''); //Set update action status 'updated or error' to ''
      }

Toastr.jsx

    componentDidUpdate() {
     this.routerConfigNotification(this.props.config); //Getting from store
   }
    configNotify(config) {
        const message = checkForRouterConfigUpdateState(config);
    if(message) {
            this._addNotificationNormal(message.title, message.type, message.text);
          }
    }

Utils

    export function checkForRouterConfigUpdateState(routerConfig) {

  let message = {};
  let messageText;

  switch (_.get(routerConfig, 'updateStatus')) {
case '_error':
      messageText = 'An error has been occurred while updating configuration';
      return message = {
        mode: 'normal',
        title: 'Error',
        type: 'info',
        status: _.get(routerConfig, 'updateStatus'),
        text: messageText
      };

    case '_updated':
      messageText = 'Successfully Updated';
      return message = {
        mode: 'normal',
        title: 'Updated',
        type: 'info',
        status: _.get(routerConfig, 'updateStatus'),
        text: messageText
      };
}
}

Я пробовал другие способы обновления жизненного цикла, но ближе всего я был к решению этой проблемы - использовать функцию setTimeout, которая, как я знаю, взломана, и я уверен, что есть способ решения подобных асинхронных проблем. Заранее спасибо.

1 ответ

Является this.props.updateConfigNode(node, latestConfigData) Обещание? Если так, вы можете поставить closeModal в then блокировать так, чтобы он вызывался только после выполнения вашего запроса.

this.props.updateConfigNode(node, latestConfigData).then(() => {
  this.closeModal();
});
Другие вопросы по тегам