mrTyler
@mrTyler
Frontend Developer

Как разрезолвить Promise на основании данных, поступивших из стороннего компонента?

Допустим есть функция, вызывающая промис и ожидающая его исполнения, но нам необходимо спросить пользователя о том, как нужно разрезолвить этот самый промис. Соотвественно мы показываем кастомный диалог (javscript confirm нам не подходит, хотя и работает) и вот из этого самомого диалога требуется этот самый промис обработать.

Промис

{
	closeModalView() { return this.closeView() }

	closeView() { 
		return new Promise( (resolve, reject) => {
			if (this.state.saveViewWithoutChanges) {
				return reject();
			}

			if (!this.state.saveViewWithoutChanges) {
				return resolve();
			}
		})
	}


	render() {
		<Dialog 
			onSuccessButtonClick={ () => this.setState({saveViewWithoutChanges: false}) }
			onCancelButtonClick={ () => this.setState({saveViewWithoutChanges: true}) }
		/>
	}
}


Собственно мы имеем инициализацию Promise раньше, чем вызов и соответственно мутирование state ничего нам не даст.

Вопрос: как разрезолвить Promise на основании данных, поступивших из стороннего компонента?

Вполне могу предположить, что я туплю. Поправьте, если так.
  • Вопрос задан
  • 491 просмотр
Решения вопроса 1
@vshvydky
не понятно когда вы вызываете тот самый closeView() , если до события , то он и отработает раньше изменений.
вы сделайте closeView().then(()=>{console.log('true');}).catch((error=>{console.log('error');}); и вы увидите, что скорее всего ваш промис прекрасно умирает еще до изменения события.
промис это асинхронная задача одноразового использования, а судя по вашему коду, вы думаете, что промис будет ждать изменения , которые вы посылаете в стейт.
Топорный вариант, в события саксес и кенсел вызывать функцию closeView(true) closeView(false)
и переписать функцию типо так:
closeView(state) { 
    return new Promise( (resolve, reject) => {
      if (state) {
        return reject();
      }
else {
        return resolve();
      }
    })
  }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@DenJel
А что мешает инициализировать промис после мутирования? Либо хранить сам промис в конструкторе?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы