#javascript #ecmascript_6 #терминология #promise
Что такое thenable и как он используется?
Ответы
Ответ 1
Thenable этот тот же Promise, например, потому что он имеет метод then в виде Promise.prototype.then(). Как подметил vp_arth: henable не обязан быть полноценным Promise. Так, например, Promise.resolve(value) работает по такой логике: if the value is a thenable (i.e. has a "then" method), the returned promise will "follow" that thenable, adopting its eventual state; otherwise the returned promise will be fulfilled with the value Если value это промис, то возвращаемый промис(возвращает Promise.resolve) будет следовать логике промиса в аргументе value. Пример: // тут then будет выполнять then для new Promise Promise.resolve( new Promise(resolve => setTimeout(resolve, 1000, 'Выполнился через секунду')) ).then(value => console.log(value)) Иначе будет возвращен промис с уже выполненным значением: // тут передается промис с выполненым(resolve) значением Promise.resolve('Выполнился через секунду').then(value => console.log(value))Ответ 2
Javascript включает реализацию спецификации Promises/A+ Согласно этой спецификации термин thenable означает следующее: “thenable” is an object or function that defines a then method. “thenable” – это объект или функция, в которых определен метод then.Ответ 3
Promise.resolve(value): if the value is a thenable (i.e. has a "then" method), the returned promise will "follow" that thenable, adopting its eventual state; otherwise the returned promise will be fulfilled with the value Если у промиса есть then, то вся цепочка выполнится. Если then нет, то сразу вернётся значение. // сначала выполнится вся цепочка промиса, а потом вернётся результат var promise1 = Promise.resolve(new Promise((resolve, reject) => { resolve([1, 2, 3]); }).then(res => res)); promise1.then(function(value) { console.log(value); // выведет: Array [1, 2, 3] }); // сразу получаем результат var promise2 = Promise.resolve([1, 2, 3]); promise2.then(function(value) { console.log(value); // выведет: Array [1, 2, 3] });
Комментариев нет:
Отправить комментарий