не могу понять такой test case:
Код:
|
2.3.3: Otherwise, if `x` is an object or function,
2.3.3.3: If `then` is a function, call it with `x` as `this`,
first argument `resolvePromise`, and second argument `rejectPromise`
2.3.3.3.1: If/when `resolvePromise` is called with value `y`, run `[[Resolve]](promise, y)`
`y` is a thenable for a thenable
`y` is a thenable that tries to fulfill twice for a synchronously-fulfilled custom thenable
`then` calls `resolvePromise` synchronously via return from a fulfilled promise |
что такое `y` is a thenable for a thenable?
thenable-объект понятно
var y = {
then: function (…) {
…
}
};
а как будет выглядеть "a thenable for a thenable"?!
по описанию тест кейса в голове рисуется что-то типа такого:
var x = {
then: function (resolvePromise) {
resolvePromise(y);
}
};
var y = {
then: function (onFulfilled) {
onFulfilled('y1');
onFulfilled('y2');
}
};
new Promise(function (resolve) {
x.then(resolve);
}).then(function (value) {
console.log('value =', value);
}, function (reason) {
console.log('reason = ', reason);
});
но этот код работает без ошибок, в консоль выводится "y1"