节点 - Q库 - Q.reject不进入失败块

时间:2017-02-06 14:01:59

标签: node.js promise q

我的代码如下所示。当我q.reject(new Error("outside test")时,它会打印“失败功能”。但是当我执行q.reject(new Error("inside test")时,它不会进入失败功能块并且不打印任何内容。不知道为什么会发生这种情况,并且有什么可以实现我想要的。有人可以帮忙吗?

    var q = require('q');

    function test(a,callback){
      return callback("a");
    }
    function test2(){
      q(undefined)
      .then(function(){
        //return q.reject(new Error("outside test"));
        test("a",function(err){
            console.log("here2");
            return q.reject(new Error("inside test"));
        });
      })
      .fail(function(err){
          console.log("Fail function");
      });
    }

    test2(); 

1 个答案:

答案 0 :(得分:0)

返回值q.reject(new Error("inside test"))不是test()的返回值,而是传递给test()的回调值。

如果没有关于test功能的信息,我不知道它会返回什么,但根据您的描述,这不是被拒绝的承诺,而是其他内容,或者什么都没有(在这种情况下它是undefined)。如果test没有返回一个promise(或者是thenable),它的返回值将变成一个立即解析的promise,因此不会调用.fail()回调。