Javascript Q函数链

Javascript Q函数链,javascript,function,q,Javascript,Function,Q,我不想用Q.fcall,我想这样。我在代码中的问题是,我似乎无法从向sqrt()传递参数。所以它现在返回16(a+b之和),而不是4 function sum(a, b) { var defer = Q.defer(); if (!a || !b) { defer.reject('error'); } else { defer.resolve(a + b); } return defer.promise; } functio

我不想用Q.fcall,我想这样。我在代码中的问题是,我似乎无法从
sqrt()
传递参数。所以它现在返回16(a+b之和),而不是4

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);
    });
运行此行时,
sqrt()
以零参数运行,其返回值传递给
。然后
。您要传递的是函数本身到
。然后
,而不是调用它

sum(8, 8).then(sqrt())
当您有
foo(bar())
时,首先执行
bar
,并将其返回值传递给
foo
。这就是JavaScript的工作方式,行为是相同的,不管
foo
期望什么样的值。
sum(8, 8).then(sqrt)