如何用Bluebird提升NodeJS Express

我用Express来使用NodeJS,并使用Bluebird作为承诺。 我试图promisify应用程序对象如下,但一旦promisified函数总是抛出错误。 部分代码如下:

var express = require('express'), app = express(), bodyParser = require('body-parser'), Promise = require("bluebird"); app.postAsync = Promise.promisify(app.post); app.postAsync('/api/v1/users/update').then(function(req, res, next) { // never gets here }) .catch(function(err) { console.log("doh!!!"); }); 

我试图promisifyAll具有相同的效果。 为什么它失败了,有什么办法promisify后/得到?

你真的不想这样做。 承诺是这个错误的抽象。

一个承诺代表一个最终的操作的结果。 一个承诺只能改变它的状态一次 ,即使你设法正确promisify app.post它将只能服务一个客户端,一次。

承诺是一个了不起的抽象 – 但这绝对不是一个问题的承诺目的是要解决。 相反,如果你对带有承诺的有趣的抽象感兴趣,你可以检查kriskowal的(Q作者)Q-IO或者其中一个承诺路由器,你返回承诺来响应,但是处理器本身被多次调用。

我不能强调这足够的 – 承诺是一个了不起的抽象,但他们不解决或试图解决所有的并发问题。