猫鼬:使用promises作为其他函数的参数

时间:2018-03-08 13:54:12

标签: node.js express mongoose promise async.js

我试图很好地理解如何使用promises,主要是因为我想查询数据然后使用该数据来查询其他数据

我有这个架构:

var serviceSchema = new Schema({
name: String,
});

这个方法就可以了:

serviceSchema.statics.getIdByName = function getIdByName (serviceName) {

this.findOne({name :serviceName }).exec(function(err, service){
    if(err) console.log(err)

    return service._id

})
}

在我的代码中,我想做类似的事情:

var service_id = Service.getIdByName("facebook")
otherSchema.findOne({service : service_id}).exec(...)

但是service_id是一个承诺,所以查询不对,我不想进入回调地狱并在回调中调用模型等 我尝试过类似

的异步
async.series([getVariables], function(err, results){
otherSchema.findOne({service : service_id}).exec(...)})

getVariables是:

function getVariables(callback1) {
if(service_id!=undefined) {
    callback1(serviceID)
}}

如何实现这一目标的任何帮助都非常受欢迎! 非常感谢

2 个答案:

答案 0 :(得分:2)

尝试此exec()返回承诺。

serviceSchema.statics.getIdByName = function getIdByName(serviceName) {
    return this.findOne({
        name: serviceName
    }).exec();
}

调用getIdByName函数

Service.getIdByName("facebook").then((data) => {
    console.log(data)
})

答案 1 :(得分:0)

答案实际上是使用async / await和do var x = await Model.findOne()。exec()

或任何返回promise的函数,然后你可以在代码中的任何地方使用x