2016-06-08 3 views
1
function sum(a, b) { 
    var defer = Q.defer(); 
    if (!a || !b) { 
     defer.reject('error'); 
    } else { 
     defer.resolve(a + b); 
    } 
    return defer.promise; 
} 
function sqrt(data) { 
    var defer = Q.defer(); 
    defer.resolve(Math.sqrt(data)); 
    return defer.promise; 
} 
sum(8, 8) 
    .then(sqrt()) 
    .then(function (result) { 
     console.log(result); 
    }, function (error) { 
     console.log(error); 
    }); 

Я не хочу использовать Q.fcall, я хочу это так. И моя проблема в коде заключается в том, что я не могу передать аргументы sqrt() из .then. Таким образом, в настоящее время он возвращает 16 (сумму а + Ь), вместо 4.Функциональная цепочка Q

+1

Если у вас есть 'foo (bar())', 'bar' выполняется первым, а его возвращаемое значение передается' foo'. Так работает JavaScript, и это поведение одинаково, неважно, какое значение ожидает 'foo'. –

ответ

3
sum(8, 8).then(sqrt()) 

Когда эта линия запускается, sqrt() запускается с нулевыми аргументами и его возвращаемого значения передается .then. То, что вы хотите передать, это функция до .then, не назовите ее.

sum(8, 8).then(sqrt) 
+0

Правда, 'sum (8,8)' сначала вызывается ... –

Смежные вопросы