Javascript 函数*不使用节点模块
我想从Mongo DB同步获取数据,所以我想使用*和yield。其他明智的正常使用回调其工作良好 运行此应用程序时,它会说getAsync不是“UserDao.getAsync(request);”行中的函数 我正在使用来自“”的引用Javascript 函数*不使用节点模块,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,我想从Mongo DB同步获取数据,所以我想使用*和yield。其他明智的正常使用回调其工作良好 运行此应用程序时,它会说getAsync不是“UserDao.getAsync(request);”行中的函数 我正在使用来自“”的引用 请帮助我解决问题,尝试将数据库.models.modelName.find包装成承诺。那么您的resolve()应该在exec函数中,您为什么认为yield是同步的?这取决于生成器的使用方式,在本例中,它可能是异步的。“它说getAsync不是第‘UserDao.
请帮助我解决问题,尝试将
数据库.models.modelName.find包装成承诺。那么您的resolve()应该在exec函数中,您为什么认为yield
是同步的?这取决于生成器的使用方式,在本例中,它可能是异步的。“它说getAsync不是第‘UserDao.getAsync(request);’行的函数”-您发布的代码既没有该行,也没有在任何地方定义一个getAsync
方法。你的意思是getSync
?首先,它是上面代码中的一个函数,所以不清楚问题出在哪里。第二个问题是,除非您让生成器执行异步操作,否则它们不会执行任何异步操作。使用async..await(在节点8中提供)。
//userDao.js
module.exports = {
* getSync(request) {
let database = SYSTEM.getDatabase('databaseName');
let skip = (request.pageSize || 10) * (request.pageNumber || 0);
let result = yield database.models.modelName.find(request.query || {})
.limit(request.pageSize || 10)
.skip(skip)
.sort(request.sort || {})
.select(request.select || {})
.exec((data) => {
console.log('----------------- ', data);
return data;
});
console.log('=================== ', result);
return result;
}
};
//userService.js
const UserDao = require('./userDao.js');
module.exports = {
get: function(){
return UserDao.getSync(request);
}
}