melkaya94
@melkaya94

Как вернуть промис?

Для добавления данных используется функция:
addCardToMoodboard(moodboard, cardData) {
			const {hoc_methods} = this.props;
			if(moodboard.localMode){
				this.showAuthPopup({
					callback: () => {
						hoc_methods.saveLocalMoods(moodboard.id).then(payload => {
							hoc_methods.closeModal();
							const mood = safeGet(payload, 'payload', {});
							const data = {...mood, count: mood.blocks.length};
							this.addCardToMood(data, cardData);
						})
					}
				})
			} else{
				return this.addCardToMood(moodboard, cardData);
			}
		}

Здесь, если пользователь не авторизован, но есть не локальные изменения if(moodboard.localMode), то вызывается модальное окно авторизации.
showAuthPopup(options) {
			const {hoc_methods} = this.props;
			hoc_methods.showAuthPopup(options);
		}

При успешной авторизации вызывается функция сохранения изменений, которая передается в модальное окно внутри callback.
Если пользователь авторизован, вызывается функция this.addCardToMood().
addCardToMood это функция возвращает обещания
addCardToMood(moodboard, cardData){
			const {hoc_products, hoc_methods} = this.props;
			if (moodboard.count + 1 >= moodboardConstants.MOODBOARD_ITEMS_LIMIT) {
				hoc_methods.showMaxElementsInMoodboardPopup(moodboard.id);
				return Promise.reject();
			}
			return hoc_methods.fetchMoodboard(moodboard.id)
			.then(() => {
				hoc_methods.addNewBlock(moodboard.id);
				return hoc_methods.saveMood(moodboard.id)
				.then(() => Promise.resolve())
				.catch(() => Promise.reject());
			}).catch(() => Promise.reject());
		}

addCardToMoodboard должна вернуть обещание, но сейчас обещание возвращается только в блоке else. Как вернуть Promise.resolve() после успешной авторизации пользователя в модельном окне?
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
@Rhymmor
full-stack dev
saveLocalMoodsData(moodboard) {
  const {hoc_methods} = this.props;
  return new Promise((resolve, reject) => {
      this.showAuthPopup({
          callback: () => {
            hoc_methods.saveLocalMoods(moodboard.id).then(payload => {
              hoc_methods.closeModal();
              const mood = safeGet(payload, 'payload', {});
              const data = {...mood, count: mood.blocks.length};
              // reject при ошибке, если она возможна
              resolve(data);
            })
          }
      })
  });
}

addCardToMoodboard(moodboard, cardData) {
  if (moodboard.localMode) {
    return saveLocalMoodsData(moodboard)
      .then(data => this.addCardToMood(data, cardData));
  } else {
     return this.addCardToMood(moodboard, cardData);
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mannaro
@mannaro
Умею профессионально гуглить
Самый простой способ - async/await использовать тут.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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