如何使用Node.js中的promises编写带参数的函数?

时间:2015-05-21 14:04:23

标签: javascript node.js promise q

假设我有以下功能:

Person.find({ surname: "Doe" }).only("name", "surname").run(function (err, people) {

});

这是我尝试使用承诺:

Q.nfcall(Person.find.only('name', 'surname').run, {surname: 'Doe'});

我应该在哪里使用promises插入only()函数的参数?

谢谢

2 个答案:

答案 0 :(得分:3)

首先,如果你使用的是Node.js 0.12+或io.js,你不需要使用Q或其他库来支持promises,因为它们本身可用。

其次,您似乎正在使用Mongoose,它本身支持承诺:http://mongoosejs.com/docs/harmony.html

当你调用Model.find()时,它已经返回一个promise,所以你可以这样做:

var promise = Person.find({ surname: "Doe" }).only("name", "surname")
promise.then(...)

答案 1 :(得分:2)

only的论据应该放在他们总是去的地方,就像find那样。它只是run你要通过回调来调用并获得承诺:

Q.nfcall(Person.find({ surname: "Doe" }).only("name", "surname").run)
.then(function(people){…}, function(err) {…});

但可能你不得不使用Q.ninvoke

Q.ninvoke(Person.find({ surname: "Doe" }).only("name", "surname"), "run")
.then(function(people){…}, function(err) {…});