Q然后()总是调用失败

时间:2014-03-15 13:07:10

标签: javascript node.js promise q

为什么'好'和'错误被调用'在下面的例子中编写控制台?

我的理解是你给那些()成功运行的东西和失败的东西?

var deferred = Q.defer();

function two() {
    deferred.resolve();
    return deferred.promise;
}

two().then(console.log('good'),console.log('Error is called'));

2 个答案:

答案 0 :(得分:3)

您必须将函数传递给.then。你做了什么,你打电话给console.log('good')并传递了调用它的结果(undefined).then。使用它:

two().then(
    function() { console.log('good'); },
    function() { console.log('Error is called'); }
);

答案 1 :(得分:2)

Q.then function can actually accept three parameters所有这些都应该是函数

  1. 成功处理程序

  2. 失败处理程序

  3. 进度处理程序

  4. 当你这样做时,

    two().then(console.log('good'), console.log('Error is called'));
    

    您实际上是将console.log s的执行结果传递给then函数。 console.log函数返回undefined。所以,实际上,你正在这样做

    var first  = console.log('good');              // good
    var second = console.log('Error is called');   // Error is called
    console.log(first, second);                    // undefined, undefined
    two().then(first, second);                     // Passing undefineds
    

    因此,您必须将两个函数传递给then函数。喜欢这个

    two().then(function() {
        // Success handler
        console.log('good');
    }, function() {
        // Failure handler
        console.log('Error is called')
    });
    

    但是,Q实际上提供了一种方便的方法来处理单点承诺中发生的所有错误。这使开发人员不必担心业务逻辑部分中的错误处理。这可以通过Q.fail函数来完成,就像这样

    two()
        .then(function() {
            // Success handler
            console.log('good');
        })
        .fail(function() {
            // Failure handler
            console.log('Error is called')
        });