@cybervito21

Как устроен chaining в простейшей реализации Promise в Javascript?

Делал ревью простенькой реализации промисов на JS.
Столкнулся с такой строчкой
this._timeout = setTimeout(this._processQueue.bind(this), 0);

Подозреваю что в ней кроется какая-то магия.

И примерчик:
var a = new Promise(
	function(resolve, reject) {
		setTimeout(function() {
			resolve('some_data');
		}, 1500);
	}).then(function() {
		setTimeout(function() {
			console.log('yep');
		}, 1500);
	}).then(function () {
		console.log('ok');
	});

Как console.log('ok'); дожидается когда отработает
setTimeout(function() {
				console.log('yep');
			}, 1500);

Как в .then() сам резолвится setTimeout()?
  • Вопрос задан
  • 284 просмотра
Решения вопроса 1
@namitos
>Как console.log('ok'); дожидается когда отработает
так и не дожидается. сначала ok, потом yep

>Как в .then() сам резолвится setTimeout()?
никак он не резолвится :)

всё проще чем кажется. пока в then не будет возвращён промис, будет выполняться следующий then.
если ты там, где console.log('yep'), будешь возвращать промис и резолвить его по таймауту, то и цепочка будет выполняться у тебя по порядку.

возможно, что ты используешь какую то кривую реализацию промисов. попробуй нативную в ноде или хроме, или посмотри, как оно сделано в vow или bluebird
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ruddy22
@ruddy22
Спасение утопающих — дело рук самих утопающих
все не сложно. Вроде...
По поводу первого куска кода.
Видимо в вашей реализации эта строчка реализует собой привязку таймера window к свойству объекта, который потом где-то используется.

А второй кусок кода, делает так:
- получаем инстанс обещания, в который мы передали колбек-экзекьютор.
- колбек во время выполнения получает 2 метода, первый возвращает данные в саксес, второй - в фейл
- затем, истекает таймер и возвращает данные в .then, в котором объявлена функция саксес
- затем она исполняется (функция)
- данные передаются дальше в then
- каждый объект возвращает промайс
Ответ написан
Ваш ответ на вопрос

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

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