0

Здравствуйте.

Использую node.js 0.12.0. В ней есть встроенные promise. Вопрос - возможно ли задать контекст для cb-функции в then? Пример:

    var fn = function (arg1, arg2, arg3, cb) {
        setTimeout(function () {
            cb.call('context', null, arg1+arg2+arg3);
        });
    };
// promisify - функция, принимающая асинхронную функцию и возвращающая функцию, которая вернет promise. 
//Callback, по прежнему, поддерживается.
promisify(fn) (1,2,3, function (err, result) {
    console.log('via cb', this, err, result);
})
    .then(function (result) {
        console.log('via promise', this, result);
    })
    .catch(function (err) {
        console.log('error', err);
    });

Пример выше выдает

via cb context null 6
via promise undefined 6

Какие есть варианты, кроме переписывания promise, чтобы и в then был правильный контекст?

alvoro
  • 3,065
  • var p = promisify(fn) (1,2,3); p.then(function (result) { console.log('via promise', p, result); })

    но зачем? просто любопытно. "Использую node.js 0.12.0. В ней есть встроенные promise" прям нативные прям? :)

    – nörbörnën Mar 24 '15 at 00:06
  • @kolpak,

    но зачем?

    Перфекционист во мне требует)) Конечно, не критично, но все же..

    "Использую node.js 0.12.0. В ней есть встроенные promise" прям нативные прям? :)

    Не понял, что вы имеете в виду?

    Блин, не тот пример привел. Счас вопрос исправлю))

    – alvoro Mar 24 '15 at 00:18
  • @alvoro, перфекционизм - средство, а не цель. Если this в контексте вопроса не нужен для решения задачи, то и фик с ним.

    Не понял, что вы имеете в виду?

    Я так понимаю, ты используешь какой-то пакетик, потому что, насколько я знаю, нативных промисов в ноде нет. Если это так, то стоит покопаться в документации пакета. И, для общего развития, просто в документации https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Promise

    – nörbörnën Mar 24 '15 at 00:24
  • @kolpak, да нет. Никаких пакетов не ставлю. Из коробки – alvoro Mar 24 '15 at 00:28
  • 3
    Возможный дубликат вопроса: Потеря контекста вызова – Grundy Dec 30 '16 at 11:11

0 Answers0