nodejs koajs async等待没有从db.collection.find获取值

时间:2016-08-30 09:55:11

标签: node.js async-await koa

    app.use(route.get('/allUsers',async(ctx)=> {
    var usersList = await db.users.find({});

    console.log("data",usersList);

    await ctx.render('BrowseAllUsers',{userlist:usersList});
}))

这是我的代码,如果我编写console.log(userList),我将[function]作为输出,但如果我编写console.log(“data”,usersList);然后我得到了

data function (fn){
  cb = fn;

  if (results && !called) {
    called = true;
    fn.apply(this, results);
  }
}

这个输出有什么不对

使用

"dependencies": {
"babel-core": "^6.13.2",
"babel-polyfill": "^6.13.0",
"babel-preset-es2015": "^6.13.2",
"babel-preset-stage-0": "^6.5.0",
"co": "^4.6.0",
"co-monk": "^1.0.0",
"koa": "^2.0.0-alpha.5",
"koa-bodyparser": "^3.2.0",
"koa-convert": "^1.2.0",
"koa-generic-session": "^1.11.3",
"koa-passport": "^2.2.2",
"koa-route": "^3.1.0",
"koa-static": "^3.0.0",
"koa-validate": "^1.0.6",
"koa-views": "^5.0.2",
"monk": "^3.1.1",
"passport-google-auth": "^1.0.1",
"passport-local": "^1.0.0",
"swig": "^1.4.2"

}

AND node --version v4.5.0

如何获取用户列表中的用户列表我的代码有什么问题

1 个答案:

答案 0 :(得分:3)

我认为co-monkco-monk包装集合的结果。

由于db.users.find()使用thunkifyasync/await将返回thunk// Assuming `db` is a Monk instance: var usersList = await db.get('users').find({}); 无法处理(我认为是设计)。

相反,你可以使用Monk支持的常规承诺:

co-monk

我发现您需要删除对db的任何调用,否则其效果会“停留”,上述代码也会失败。

如果您愿意,您仍然可以在db.users = db.get('users'); // then, later: let results = await db.users.find(...); 中存储对该集合的引用:

{{1}}