Q函数链接

Q function chaining

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,我想要这样。我在代码中的问题是我似乎无法将参数从 .then 传递给 sqrt() 。所以它目前 returns 16(a + b 的总和),而不是 4.

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

当此行是 运行 时,sqrt() 是 运行 且参数为零,其 return 值 传递给.then。您要传递的是 函数 本身给 .then,而不是调用它。

sum(8, 8).then(sqrt)