Задать вопрос
@ZaxapKramer
Больной верстальщик

Promise. Как передать аргумент — data — в последующий .then()?

Пытаюсь разобраться в фишках ES6. Не могу вникнуть в Promise.

Допустим, вот функция - решил сделать какой-нибудь "красивый" аналог Fetch для JsonP для тренировки. Не могу понять, как с помощью Promise передать аргумент в последующий then.

Вот кусок кода - функция для получения json из jsonp (вероятно, кривая):
//...
getJsonp(url) {
	return new Promise(() => {
		const d = document, s = d.createElement("script");
		window.callbackFunc = function(data) {
			delete window.callbackFunc;
			return r;
		};
		s.async = true;
		s.src = url;
		d.body.appendChild(s);
	});
};
//...


По идее, в итоге хочу получить возможность вызывать это так:
this.getJsonp("/url/file.jsonp?callback=callbackFunc").then(data => {
	console.log(data);
});


Помогите, пожалуйста, разобраться
  • Вопрос задан
  • 1023 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 2
petermzg
@petermzg
Самый лучший программист
Promise передает 2 параметра.
new Promise(function(resolve, reject) { ... });
так что когда придет время возвращаете через вызов resolve(value)

Описание тут
Ответ написан
@vshvydky
ваш промис исполняется вникуда
const myPromise = () => {
    return new Promise((resolve, reject)=>{
        let key = setTimeout(reject, 30000, 'Promise timeout');
        // Какие-то действия асинхронные для получения результата промиса
        removeTimeout(key);
        resolve(data); // <-- вот здесь мы отправляем data в then
    });
};

Используем:
myPromise()
    .then(response=>{
        console.log('data: ', response);// вот сюда прилетела наша data .... 
    })
    .catch(console.error);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы