我使用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?
答案 0 :(得分:18)
你真的不想这样做。承诺是错误的抽象。
承诺代表一个最终操作的结果。承诺只能改变其状态一次,所以即使你设法正确地宣传app.post
,它也只能为一个客户服务一次。
承诺是一种令人敬畏的抽象 - 但这绝不是承诺旨在解决的问题。相反,如果你对带有承诺的有趣抽象感兴趣,你可以检查kriskowal(Q作者)Q-IO或你返回promises响应的promise路由器之一,但处理程序本身被多次调用
我不能强调这一点 - 承诺是一个很棒的抽象,但它们并没有解决或试图解决你所有的并发问题。