node.js - 使用 KoaJS 在 ES2015 中的类中使用带有 Yield 的生成器函数

标签 node.js koa monk ecmascript-6

我试图从构造函数调用类内部的生成器函数,它运行但没有任何反应(我的 console.log 没有打印),就好像生成器函数从未被调用一样。

更新#1:

这是我的代码的更新版本。我可以使用 next() 函数访问我的 findOne 函数,但由于我用 co-monk 包装了“用户”,所以我认为没有必要调用它。我仍然不确定为什么需要调用 next(0) 函数 2 次才能跳过 Yield 调用。

因此,当我打印“userData”的输出时,我现在变得不确定。

如果我的问题与了解产量如何工作有关,也许为我指明方向可以帮助我。我尝试使用生成器函数与除了类之外的yield调用,并且它与monk/co-monk一起工作得非常好。

更新#2:

我还应该提到我正在使用 babel6 进行转录。

"use strict";

var monk = require("monk");
var wrap = require("co-monk");
var db = monk("localhost/test");
var users = wrap(db.get("users"));

class User {

    constructor(user) {
        if (typeof user == "object") {

            var findUser = this.findOne(user.id);
            findUser.next();
            findUser.next();

            if(findUser != null){
                this._user = user;
            }

        }
        else {
            console.error("user parameter is not an oject");
            return false;
        }
    }

    *findOne(id) {

        var userData = yield users.findOne({_id: id});

        console.log(userData); // Getting undefined

        this._user = userData;

    };


}

var _user = new User({id : "1234"});
console.log(_user);

export default User;

最佳答案

看起来co-monk的文档有点模糊,但是看看one test it has ,它需要在co内使用。

var co = require("co");

// rest of your code

  findOne(id) {
    return co(function* () {
      var userData = yield users.findOne({_id: id});
      console.log(userData); // Getting undefined
      this._user = userData;
    });
  };

它不允许您将异步代码无缝转换回同步代码,因此 this.findOne() 将返回一个 promise 。因此,在调用 new User({id : "1234"}) 后,您的 User 对象可能不会立即填充。

关于node.js - 使用 KoaJS 在 ES2015 中的类中使用带有 Yield 的生成器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34640449/

相关文章:

node.js - ~~ Javascript 运算符

node.js - 在 npm 下观看 Mocha 失败

node.js - 传入的参数必须是 24 个十六进制字符的字符串 - 我认为是

node.js - 在node.js-mongodb中分组

mysql - 如何在node.js中减去knex.raw中的查询

node.js - 如何在 Gulp 中将变量从一个管道传送到另一个管道

node.js - Spectron:如何测试Electron `shell.openExternal('一些url')`

javascript - 在 node-webkit 中使用默认程序打开文件

javascript - 获取生成器函数的值,koa

mongodb - 如何覆盖 MongoDB 中的文档