猫鼬:使用承诺作为其他功能的参数
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
我试图更好地理解如何使用 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