在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
语句中被catch
) Possibly 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(....)