Mongoose:使用 Promise 作为其他函数的参数
Posted
技术标签:
【中文标题】Mongoose:使用 Promise 作为其他函数的参数【英文标题】:Mongoose : using promises as parameters for other functions 【发布时间】:2018-08-16 21:45:29 【问题描述】:我试图很好地理解如何使用 Promise,主要是因为我想查询数据,然后使用该数据查询其他数据
我有这个架构:
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)
非常欢迎任何有关如何实现这一目标的帮助! 非常感谢
【问题讨论】:
【参考方案1】:这个问题的答案实际上是使用 async/await and and do var x = await Model.findOne().exec()
或者任何返回promise的函数,那么你可以在代码的任何地方使用x
【讨论】:
【参考方案2】:试试这个exec()
返回承诺。
serviceSchema.statics.getIdByName = function getIdByName(serviceName)
return this.findOne(
name: serviceName
).exec();
调用 getIdByName 函数
Service.getIdByName("facebook").then((data) =>
console.log(data)
)
【讨论】:
非常感谢您的回答,这并不能解决我的问题,因为 getIdByName 现在只是一个 findOne 函数,我只能在我想在外部访问的“then”内访问服务的 ID,存储在一个变量中,我可以将其作为参数传递给另一个查询,这是否意味着我只能在“then”中执行此操作?不是回调地狱吗,因为实际上我必须在进行查询之前获得很多 id @mtths 它不会创建回调地狱,因为您可以创建承诺链,而不是回调地狱。 你尝试了什么? 这里有一个更易读的版本:Service.findOne(name : 'JollyClick').then(function(service) var service_id = service._id return Data.findOne(name : "Objectifs ").exec() ) .then(function(data) var objectifsID = data._id return Data.findOne(name : 'Personnalité').exec() )。然后(函数(data2) var personnaliteID = data2._id DataUse.create(service:service_id,user:service_id,data:dataTypesIds,function(err,datause))当我想创建我的文档时无法访问service_id 在.then
外部声明service_id 并在.then
内部赋值。 var service_id; Service.findOne( name: 'JollyClick' ).then(function (service) service_id; = service._id return Data.findOne( name: "Objectifs" ).exec(); )
以上是关于Mongoose:使用 Promise 作为其他函数的参数的主要内容,如果未能解决你的问题,请参考以下文章
在 Mongoose 查询中使用 javascript Promise
节点使用带有 .catch() 语句的 Promise.all 为 Mongoose 请求抛出 UnhandledPromiseRejectionWarning