如何获取mongoose find()的异步返回值?
发布于 9 年前 作者 WiseWolfs 8473 次浏览 最后一次编辑是 8 年前 来自 问答

在faqDao.js中(通过question从数据库中查询,返回doc):

var findByQuestion = exports.findByQuestion = function(query,callback){
	Faq.findOne(query,function(err,doc){
		if(err){
			util.log('FATAL'+err);
			callback(err,doc);	
		}
		callback(null,doc);
		
	});

}

//词库的模糊查询
exports.findFaqByQuestion = function(question,callback){
	var query = {};
	if(question){
		query['question'] = new RegExp(question);
	}
	exports.findByQuestion(query,function(err,doc){
		if(err){
			util.log('FATAL'+err);
			callback(err,doc);
		}
		util.log('doc:'+doc);
		callback(null,doc);
	});
}

在index.js中(服务器端)

function dealQuestion(question){

	//TODO
	需要在这里将question传到上面的函数中,在这里,我应该如何获得doc这个返回值???
	
	return doc ;
}

查询find是异步执行的,return的结果都是undifined,在网上查,需要使用Promise,还是不太理解,不知道该怎么处理这个问题。

2 回复
var faqDao = require("faqDao.js");
faqDao.findFaqByQuestion(question,function dealQuestion(question){ 
	//TODO
})

个人感觉这里promise 也不能"return出去" 不对可喷

你的find里callback不是已经拿到了数据吗?不要用同步的思维。

faqDao.findFaqByQuestion(question,function(data){
     //the data is your doc.
});
回到顶部