【发布时间】:2018-08-17 04:19:22
【问题描述】:
我正在为猫鼬的承诺而苦苦挣扎,我需要查询数据并以该数据作为参数查询其他数据
我现在在做什么:
var user_id;
var service_id;
var purpose_id;
User.findOne({name : 'demo1'}).exec().then(function(user){
user_id = user._id;
console.log('user')
return Service.findOne({name : 'JollyClick'}).exec();
}).then(function(service){
service_id = service._id;
console.log('service')
return Purpose.findOne({name : 'Newsfeed'}).exec(function(err, result){
if(err) console.log(err)
});
}).then(function(purpose){
purpose_id = purpose._id
console.log('purpose')
DataUse.create({user : user_id, service : service_id, purpose : purpose_id}, function(err, datause){
if(err) console.log(err)
})
})
前 2 个 'then' 的值正确返回,但它为 purpose_id 抛出错误,说它未定义,它不明白为什么,我整天都遇到同样的问题,在某些时候我修复了其中一个更改分号,但我不知道它为什么会起作用...
我检查了一个简单的查询
Purpose.findOne({name : 'Newsfeed'}).exec(function(err, result){
if(err) console.log(err)
});
确实返回结果
顺便说一句,我正在使用猫鼬和蓝鸟作为承诺
请帮忙! 谢谢
【问题讨论】:
-
可能你这里有问题` return Purpose.findOne({name : 'Newsfeed'}).exec(function(err, result){ if(err) console.log(err) }) ;` 只需返回
.exec()并在链的末尾使用单个.catch -
非常感谢您的回答,我的代码就是这样,我添加了错误处理以获得解释,这是我知道“目的”未定义的唯一方法,当我捕获时(或者在每个 exec 之后或最后)它没有向我显示任何我会查看的内容 async await 看起来它可以为我节省很多麻烦
标签: javascript node.js mongoose promise bluebird