如何使用Bluebird宣传NodeJS Express

时间:2014-07-17 06:01:04

标签: javascript node.js express promise bluebird

我使用NodeJS和Express并使用Bluebird进行承诺。我试图像下面那样宣传app对象,但是一旦有效的函数总是抛出错误。部分代码如下:

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!!!"); 
        });

我试图以同样的效果宣传所有。为什么它失败了,有没有办法宣传post / get?

1 个答案:

答案 0 :(得分:18)

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

承诺代表一个最终操作的结果。承诺只能改变其状态一次,所以即使你设法正确地宣传app.post,它也只能为一个客户服务一次。

承诺是一种令人敬畏的抽象 - 但这绝不是承诺旨在解决的问题。相反,如果你对带有承诺的有趣抽象感兴趣,你可以检查kriskowal(Q作者)Q-IO或你返回promises响应的promise路由器之一,但处理程序本身被多次调用

我不能强调这一点 - 承诺是一个很棒的抽象,但它们并没有解决或试图解决你所有的并发问题。