我一直在慢慢地将一个回调密集的模块转换为使用promises(Q),并且我遇到了运行find()
的Mongoose模型的一个奇怪问题。简而言之,承诺链永远不会超过最初的find
命令。我已经将此方法恢复为其回调实现,但仍然没有看到回调执行。我已将其分解为最基本的行为,handleMedia
函数永远不会运行。
function getMediaByURL(url) {
Media.find({url: url}, handleMedia);
function handleMedia(err, media) {
console.log(err);
console.log(media);
}
}
正在另一个模块中创建数据库连接,但我看到所有正确的事情都以正确的顺序初始化,并且Mongoose连接的readyState
之前就是1
执行find
函数。如果我使用find
q.nbind
将{state: 'pending')
方法转换为承诺,并按1秒间隔记录该值,则值始终为find
。
我有另一个模型可以使用me[prop];
的承诺版本保存在同一个连接上。我不知所措。
答案 0 :(得分:0)
你在“查找函数”之后声明了“handleMedia函数”,所以只调用了回调函数..在你的代码中,首先找到函数在“handleMedia函数”初始化之后执行
所以试试这个
function getMediaByURL(url) {
function handleMedia(err, media) {
console.log(err);
console.log(media);
}
Media.find({url: url}, handleMedia);
}