Node.js Mongoose:使用承诺作为其他函数的参数
我试图很好地理解如何使用承诺,主要是因为我想查询数据,然后使用该数据查询其他数据 我有这个模式:Node.js Mongoose:使用承诺作为其他函数的参数,node.js,express,mongoose,promise,async.js,Node.js,Express,Mongoose,Promise,Async.js,我试图很好地理解如何使用承诺,主要是因为我想查询数据,然后使用该数据查询其他数据 我有这个模式: var serviceSchema = new Schema({ name: String, }); 这个方法是: serviceSchema.statics.getIdByName = function getIdByName (serviceName) { this.findOne({name :serviceName }).exec(function(err, service){
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(...)
但是服务id是一个承诺,所以查询是不对的,我不想在回调地狱中,在回调内部调用模型等等
我尝试过使用类似的异步
async.series([getVariables], function(err, results){
otherSchema.findOne({service : service_id}).exec(...)})
其中getVariables是:
function getVariables(callback1) {
if(service_id!=undefined) {
callback1(serviceID)
}}
任何关于如何实现这一点的帮助都是非常受欢迎的!
非常感谢试试这个exec()
返回承诺
serviceSchema.statics.getIdByName = function getIdByName(serviceName) {
return this.findOne({
name: serviceName
}).exec();
}
调用getIdByName函数
Service.getIdByName("facebook").then((data) => {
console.log(data)
})
这个问题的答案实际上是使用async/await和do var x=await Model.findOne().exec()
或者任何返回承诺的函数,那么您可以在代码中的任何地方使用x非常感谢您的回答,这并不能解决我的问题,因为getIdByName现在只是一个findOne函数,我只能在“then”中访问服务的id,我想在“then”中访问它,存储在一个变量中,我可以将其作为参数传递给另一个查询,这是否意味着我只能在“then”内执行该操作?这不是很糟糕吗,因为事实上,我在做这个测试之前必须获得很多IDquery@mtths它不会创建回调地狱,因为您可以创建承诺链,而不是回调地狱。您尝试了什么?这里有一个更可读的版本:Service.findOne({name:'JollyClick'})。然后(函数(服务){var service\u id=service.\u id返回Data.findOne({name:'Objectifs}).exec()}).then(函数(数据){var objectifsID=Data.\u id返回Data.findOne({name:'Personnalité'}).exec()).then(函数(data2){var personnaliteID=data2.\u id DataUse.create({service:service\id,user:service\id,Data:dataTypesIds}),function(err,datause){}当我想在
外部创建文档时,无法访问服务id。然后
在内部赋值。然后
var service\u id;service.findOne({name:'JollyClick'})。然后(函数(service){service\u id;=service.\u id返回数据。findOne({name:“Objectifs”}).exec();})