Показать сообщение отдельно
  #1 (permalink)  
Старый 26.12.2014, 19:02
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Promise/A+ test case
не могу понять такой 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"
Ответить с цитированием