Seneca.js,Promises和错误处理

时间:2018-04-11 21:14:22

标签: node.js promise seneca

我们正在使用seneca.js将消息放入我们的Node应用程序的队列中。我们宣传act调用,并将所有seneca用法包含在我们称为MessageBus的服务中。所以现在,MessageBus.publish使用Seneca将调用放在队列上并等待响应:

MessageBus.publish({ ... })
    .then(result => doSomething(result))
    .catch(error => handleError(error));

以下是我们写的服务的相关部分:

function MessageBus() {
    //initialization
    seneca.use('seneca-amqp-transport'); //instruct seneca to use a transport

    seneca.client({});
    seneca.listen({});

    const act = function(message, cb) {
        seneca.act(message, function(err, response) {
            if (err) {
                console.error(err);
                cb(err);
            } else {
                cb(null, response);
            }
        });
    };

    const promisified = Promise.promisify(act, { context: seneca });

    return {
        publish: promisified,
    };
}

module.exports = MessageBus();

每次通话时,我们都需要添加catch来处理错误。这非常有效,但有很多重复的代码。

现在,我们正在使用async/await,我想在一个地方处理所有错误,而不需要在try/catch块中包装每个调用。但是,我的尝试没有用。

我添加的是一个调用promisified函数并捕获错误的函数。然后publish导出该函数。它一半有效,但在act函数中,cb未定义。无论我做了什么,cb都没有被定义,也从未被调用过。

我知道看起来错误是在seneca.act中处理的,但如果发生错误且MessageBus.publish未包含在try/catch块中,快递应用仍会崩溃。

我的目标是拥有Wes Bos's solution in this catchErrors function的某些内容。我希望不必在MessageBus.publish块中包含每个try/catch调用,而是将该代码写入一个位置并在那里处理所有错误。

0 个答案:

没有答案