Blubird永远不会点击.catch声明

时间:2015-09-25 17:12:57

标签: node.js redis bluebird

我正在使用Node.js,Bluebird和Redis。给出:

redisClient.hmsetAsync([key, 'sn', sn, 'make', make])
    .then(redisClient.setAsync(key + ":radio", radioArray))
    .then(TMatic.send(res, 200))
    .catch(function (e) {
        console.log("Error reading file", e);
        TMatic.send(res, 500);
    });

当“radioArray”为空时,redis抛出此异常:

Unhandled rejection Error: ERR wrong number of arguments for command

此代码始终发送200响应。 Whey不会点击.catch()方法并抛出500?

ANSWER! 在黑客大约半小时后,我想出了这个。谢谢macareno.marco!

redisClient.hmsetAsync([key, 'sn', sn, 'make', make])
        .then(function saveRadios() {
            if (radioArray.length) {
                console.log("radio");
                return redisClient.setAsync(key + ":radio", radioArray)
            }
        })
        .then(function () {
            TMatic.send(res, 200);
        })
        .catch(function (e) {
            console.log("Error:", e);
            TMatic.fail(e, res);
        });

1 个答案:

答案 0 :(得分:0)

使用线时:
.then(TMatic.send(res, 200))
正在评估该参数,并等待返回一个函数,以便bluebird可以调用它。您应该使用函数,如下所示:

.then(function(res) {
    TMatic.send(res, 200);
}