在EventEmitters中使用Promise

时间:2014-06-03 01:59:42

标签: javascript node.js

所以如果我在node.js中有一个服务器,我知道我可以有类似的东西:

server.on('request', function() {
    console.log('received request');
});

但我想用promises做同样的事情。我导入Q并做了:

Q.nfcall(server.on('request')).then(function() {
    console.log('received request');
});

但它说" TypeError:listener必须是一个函数。"你怎么做到这一点?谢谢!

1 个答案:

答案 0 :(得分:2)

您需要将函数传递给Q.nfcall,而不是调用.on()的结果。 Q然后将为调用提供回调参数。使用

Q.nfcall(server.on, 'request').then(…)
// or rather, since it wouldn't get the context right:
Q.nbind(server.on, server)('request').then(…)
Q.ninvoke(server, 'on', 'request').then(…)

但是,这似乎不是一个好主意,因为request event会多次触发,但承诺只能解决一次(它代表一个值)。你可能想要研究一下FRP。