猫鼬:使用承诺作为其他功能的参数

Mongoose : using promises as parameters for other functions

我试图更好地理解如何使用 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)
}}

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

试试这个 exec() returns 承诺。

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

调用getIdByName函数

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

这个问题的答案实际上是使用 async/await and and do var x = await Model.findOne().exec()

或任何 returns 承诺的函数,然后您可以在代码中的任何地方使用 x