gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 00:40:58 25 4
gpt4 key购买 nike

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

更新#1:

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

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

如果我的问题与理解 yield 的工作原理有关,也许为我指明方向会对我有所帮助。我尝试在类之外使用带有 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 。因此,您的 User 对象可能不会在调用 new User({id : "1234"}) 后立即填充。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com