在promisified ExpressJs函数中引发错误

我不太确定我是否明白在承诺中如何处理错误(而且我对承诺还是比较陌生的,所以我可能不会充分利用它们)。

我有以下代码:

app.listenAsync = Promise.promisify(app.listen); app.listenAsync(config.port) .then(function done() { console.log("We're listening!"); }) .catch(function (err) { console.log("Abort abort!"); }); 

由于我不明白的原因,我的catch()从来没有被调用,即使app.listenAsync抛出一个错误,例如EADDRINUSE。 为什么?

编辑 :我只是注意到,如果我这样做

 var listenAsync = Promise.promisify(app.listen); listenAsync(config.port) .then(function done() { console.log("We're listening!"); }) .catch(function (err) { console.log("Abort abort!"); }); 

给予几乎正确的行为。 listenAsync引发一个错误(这次在catch语句中被catchPossibly unhandled TypeError: listener must be a function未被Possibly unhandled TypeError: listener must be a function 。 我错过了什么吗?

这与promise没有任何关系,只是基本的javascript:你在调用listen,就好像它是一个函数,但它是一个app的方法。

一些选项:

 Promise.promisifyAll(app); // Note how it's called as a method on app app.listenAsync(...).then(....) 

要么

 // Bind the function as a method of app var appListenAsync = Promise.promisify(app.listen, app); appListenAsync(...).then(....)