我试图从构造函数调用类内部的生成器函数,它运行但没有任何反应(我的 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/