Leo5878
@Leo5878
Улыбчивай, люблю учить и учиться

Как получить результат из двух функций и передать ее в третью на промисах?

У меня есть функция и событие MutationObserver. MutationObserver срабатывает, когда DOM меняется.
И есть функция которая работает при клике.
Проблема в том, чтобы дождаться результата выполнения функции и дождаться MutationObserver. Если функция и событие сработали и все вернули true, то нужно вызвать третью функцию с аргументом, пришедшею из первой функции.
MutationObserver срабатывает, когда новый DOM создан и готов для работы с ним. Как, это все можно реализовать на промисах? Гуглил, видел примеры, но не очень понимаю, как, это должно быть реализовано в моем случаи. Первая функция вызывается из одного места, вторая - событие, третья должна быть вызвана в случаии успеха первых двух

Пример:
function f1(){
  if(true){
    return true;
  }
}

let observer = new MutationObserver((mutations) => {
 ....
});

function f3(arg){
 ...
}
  • Вопрос задан
  • 135 просмотров
Пригласить эксперта
Ответы на вопрос 2
bubandos
@bubandos
bash'у, javascript'ую, php'лю, css'аю, html'каю
MutationObserver вам тут нафиг не нужен.
Делайте по клику коллбек, который вызовет то, что вам нужно (ajax запросы, вычисления и все что угодно) и внесет все изменения в DOM. Сомневаюсь, что вставка DOM у вас займет больше 0,3 секунды. Так что можете смело забивать на mutationObserver и синхронно показывать ваше окно после ресолва промиса после клика.
Ответ написан
@rampagerushtc
Что-то типа того?
const returnTrue = (arg) => {
  setTimeout(console.log(`First function: - I\'m done. The argument is ${arg}`), 2000);
  return [true, arg];
};


  
const mutationObserver = new Promise((resolve, reject) => {
	setTimeout(() => {
  		resolve('First promise done');
  }, 1500);
 });

const anotherPromise = args => {
	return new Promise((resolve, reject) =>
					setTimeout(()=> {
						resolve(`Second promise done with ${args}`);
					}, 1500));
};
 
mutationObserver
.then(result => {
	const arr = returnTrue('some args')
	if (arr[0]) {
		console.log(result );
		return anotherPromise(arr[1]);
  }
 })
.then(result => {
	console.log(result);
});
Ответ написан
Ваш ответ на вопрос

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

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