Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.03.2020, 14:36
Профессор
Отправить личное сообщение для atanov Посмотреть профиль Найти все сообщения от atanov
 
Регистрация: 27.06.2016
Сообщений: 180

как правильно в промисе использовать функции
Доброго времени суток,
затертый до дыр вопрос выполнить одну функцию после другой. Очевидный путь - за промис, однако вызов функции такого вида func(arg)() не работает.

let myPromise = new Promise
(
	(resolve, reject) => 
	{
		firstFunction(param)();
	  	resolve();
	}
);
myPromise.then(secondFunction(param)());


Но, secondFunction не ждёт зараза первую.

Если поставить таймаут, то всё ОК:

firstFunction(param)();
setTimeout(secondFunction(param)(), 2000);


обе функции возвращают анонимную:

function firstFunction(param)
{
	return () =>
	{
             ...
	}
}

Есть идеи как заставить работать?
Ответить с цитированием
  #2 (permalink)  
Старый 17.03.2020, 15:03
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Сообщение от atanov
выполнить одну функцию после другой
Promise.all
Ответить с цитированием
  #3 (permalink)  
Старый 17.03.2020, 15:06
Профессор
Отправить личное сообщение для atanov Посмотреть профиль Найти все сообщения от atanov
 
Регистрация: 27.06.2016
Сообщений: 180

А какая разница что все, что один промис? Не работает именно при использовании func(arg)()
Ответить с цитированием
  #4 (permalink)  
Старый 17.03.2020, 15:14
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

atanov,
может так?
myPromise.then(secondFunction(param));
Ответить с цитированием
  #5 (permalink)  
Старый 17.03.2020, 15:18
Профессор
Отправить личное сообщение для atanov Посмотреть профиль Найти все сообщения от atanov
 
Регистрация: 27.06.2016
Сообщений: 180

destus, не, тогда вызов второй функции не сработает. Вру, срабатывает, но всё равно не ждёт.

Последний раз редактировалось atanov, 17.03.2020 в 15:22.
Ответить с цитированием
  #6 (permalink)  
Старый 17.03.2020, 15:24
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

myPromise.then(() => secondFunction(param)());

бинго?
Ответить с цитированием
  #7 (permalink)  
Старый 17.03.2020, 15:29
Профессор
Отправить личное сообщение для atanov Посмотреть профиль Найти все сообщения от atanov
 
Регистрация: 27.06.2016
Сообщений: 180

destus, не, так тоже не срабатывает. Если без возврата анонимной функции, то всё замечательно работает, а вот с анонимной никак. А нужно, для передачи аргумента...
Ответить с цитированием
  #8 (permalink)  
Старый 17.03.2020, 15:51
Профессор
Отправить личное сообщение для atanov Посмотреть профиль Найти все сообщения от atanov
 
Регистрация: 27.06.2016
Сообщений: 180

Похоже это у меня баг, вот этот пример работает нормально:

let myPromise = new Promise
(
	(resolve, reject) => 
	{
		let a = firstFunction(3000000000)();
		console.log(a);
	  	resolve();
	}
);
myPromise.then(secondFunction(25));

function firstFunction(param)
{
	return () =>
	{
		let i;
		for(i = 0; i < param; i++)
		{
		}
		return i;
	}
}
function secondFunction(param)
{
	return () =>
	{
		console.log(param);
	}
}
Ответить с цитированием
  #9 (permalink)  
Старый 17.03.2020, 16:21
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

function one(value) {
    console.log(value)
  }

  new Promise((res, rej) => {
    res('supervalue')
  })
    .then(one) // здесь one это ссылка на ф-цию 
    // это можно переписать по другому .then(valueFromPromise => one(valueFromPromise))


или еще вариант, ) не понятен смысл зачем это надо...
function one(value) {
  console.log('one', value)
  return Promise.resolve(value)
}

function anonymous(twentyFive, value) {
  return new Promise((res, rej) => {
    res(() => {
      console.log('anonymous', twentyFive, value)
    })
  })
}

async function job() {
  const anonymousInstance = await new Promise((res, rej) => {
    res('supervalue')
  })
    .then(one) // здесь one это ссылка на ф-цию // supervalue
    // это можно переписать по другому .then(valueFromPromise => one(valueFromPromise))
    .then(anonymous.bind(null, 25)) // curring - вроде бы %)
    .then(anonymousFoo => anonymousFoo())
}

job()


function one(value) {
  console.log('one', value)
  return Promise.resolve(value)
}

function anonymous(twentyFive) {
  return value => {
    console.log('anonymous', twentyFive, value)
  }
}

new Promise((res, rej) => {
  res('supervalue')
})
  .then(one) // здесь one это ссылка на ф-цию // supervalue
  // это можно переписать по другому .then(valueFromPromise => one(valueFromPromise))
  .then(anonymous.bind(null, 25)()) // curring - вроде бы %)


function one(value) {
  console.log('one', value)
  return Promise.resolve(value)
}

function anonymous(twentyFive) {
  return value => {
    console.log('anonymous', twentyFive, value)
  }
}

new Promise((res, rej) => {
  res('supervalue')
})
  .then(one)
  .then(anonymous.call(null, 25))

Последний раз редактировалось SuperZen, 17.03.2020 в 21:10.
Ответить с цитированием
  #10 (permalink)  
Старый 23.03.2020, 15:39
Профессор
Отправить личное сообщение для atanov Посмотреть профиль Найти все сообщения от atanov
 
Регистрация: 27.06.2016
Сообщений: 180

SuperZen,
да не, всё ок с промисами, просто у меня "руки не из того места..."
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как же правильно вызывать запрос Ajax в функции? izumov AJAX и COMET 2 18.05.2019 17:43
Как добавить данные в глобальный массив из функции Jigan2 jQuery 2 14.03.2015 18:06
Как правильно реализовать такой функционал? Julian Общие вопросы Javascript 3 16.01.2015 12:34
Как правильно очистить maxlength в input? Маэстро Events/DOM/Window 10 22.06.2011 18:14
Как из функции вызвать другую функцию и правильно передать ей параметр Alexd Общие вопросы Javascript 3 06.05.2011 03:42