Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.04.2019, 12:18
Аспирант
Отправить личное сообщение для winch Посмотреть профиль Найти все сообщения от winch
 
Регистрация: 30.04.2015
Сообщений: 87

Переменные предыдущего промиса.
приветствую уважаемых коллег!

Учусь работать с промисами. Есть примерно такой код:

doRequest(param1)
.then(data1 =>{
	return doRequest(param2);
} )
.then(data2 => {
	result = data1 + data2;
})


Во втором блоке then нужны результаты обеих запросов (data1 и data2), однако data1 там не доступна.
Как прокинуть во второй блок данные полученные в первом? или как по другому правильно решить эту проблему.
Ответить с цитированием
  #2 (permalink)  
Старый 12.04.2019, 13:11
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

https://stackoverflow.com/questions/...n-a-then-chain
Ответить с цитированием
  #3 (permalink)  
Старый 12.04.2019, 13:38
Аспирант
Отправить личное сообщение для winch Посмотреть профиль Найти все сообщения от winch
 
Регистрация: 30.04.2015
Сообщений: 87

Там приводится решение через Promise.all(...) т.е. оба запроса отправляются параллельно.
А если второй запрос необходимо выполнить после первого (т.к. для второго нужны параметры, возвращаемые первым). Тогда как?
Ответить с цитированием
  #4 (permalink)  
Старый 12.04.2019, 13:46
Аспирант
Отправить личное сообщение для winch Посмотреть профиль Найти все сообщения от winch
 
Регистрация: 30.04.2015
Сообщений: 87

Конечно, можно ещё через await или калбеками, но мне хотелось узнать есть ли решение именно по классической схеме через promis.
Ответить с цитированием
  #5 (permalink)  
Старый 12.04.2019, 14:57
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

<script>
function doRequest() {
    return Promise.resolve('data2')
}

Promise.resolve('data1')
    .then(data1 => {
        return doRequest().then(data2 => [data1, data2])
    })
    .then(([data1, data2]) => console.log(data1, data2));
</script>
Ответить с цитированием
  #6 (permalink)  
Старый 12.04.2019, 15:00
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

там есть пример, что результат первого промиса сохраняется в переменной объявленной выше... думаю чисто на промисах, без доп переменных не получится...

или ждем других читателей...
Ответить с цитированием
  #7 (permalink)  
Старый 12.04.2019, 15:12
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Сообщение от winch
Там приводится решение через Promise.all(...) т.е. оба запроса отправляются параллельно.
Там решение через Promise.all выполняется последовательно.

Последний раз редактировалось Alexandroppolus, 12.04.2019 в 15:38.
Ответить с цитированием
  #8 (permalink)  
Старый 12.04.2019, 15:48
Аспирант
Отправить личное сообщение для winch Посмотреть профиль Найти все сообщения от winch
 
Регистрация: 30.04.2015
Сообщений: 87

кажется destus классное решение показал, чуть позже проверю как будет работать.
Ответить с цитированием
  #9 (permalink)  
Старый 12.04.2019, 16:00
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

пример из первого поста, и в пример destus'a... это разные примеры %)
Ответить с цитированием
  #10 (permalink)  
Старый 12.04.2019, 16:12
Аспирант
Отправить личное сообщение для winch Посмотреть профиль Найти все сообщения от winch
 
Регистрация: 30.04.2015
Сообщений: 87

я так понял, что идея в том, что вместо:
return doRequest(param2);

из первого примера, надо написать:
return doRequest(param2).then(data2 => [data1, data2]);

В этом случае во второй then должны вернутся все нужные данные.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переменные: более правильный и быстрый код Булат Азат улы Общие вопросы Javascript 5 13.09.2017 00:06
Переменные в скрипте vvkk Элементы интерфейса 19 08.09.2014 18:10
Индивидуальные переменные в each Spamol jQuery 6 08.12.2012 14:34
Нужно сравнить дробные переменные netkent Общие вопросы Javascript 1 05.12.2010 18:30
iframe не выносит переменные nemo Серверные языки и технологии 0 23.01.2010 14:25