Node.js 将回调转换为thunk 我用猫鼬和KOA.JS(也许是个坏选择,但必须坚持下去)。 我最初的回调函数是: var _project = yield parse(this); var userdetails = this.req.user; var that = this ; //============================================================= //FInd a user , check the project name exists under the user, if not then create one //============================================================= User.findOne({ '_id': userdetails._id }, function (err, user) { if (err) { this.body = "please login again , your session seems to have expired" } console.log(user.projects.owner.indexOf(_project.name)); if(user.projects.owner.indexOf(_project.name) == -1) { //This means the project is not yet created var temp_project = new Project(_project); temp_project.save(function save() { if(err) { that.body = "Project coudn't be saved, Please try again sometime later"; } else { user.projects.owner.push(_project.name); user.save(function save() { if (err) { that.body = "This error is highly unlikely, yet if you see this .Please report this issue"; } }); that.body = temp_project; } }); } if(user.projects.owner.indexOf(_project.name) >= 0) { //THis means the project exists that.body = "You have already created a project with same name, please use a different name"; console.log("you reached till here"); } });
这本应该在正常的express world中工作,但后来我意识到我需要以thunks的形式重写,所以我当前的尝试是Node.js 将回调转换为thunk 我用猫鼬和KOA.JS(也许是个坏选择,但必须坚持下去)。 我最初的回调函数是: var _project = yield parse(this); var userdetails = this.req.user; var that = this ; //============================================================= //FInd a user , check the project name exists under the user, if not then create one //============================================================= User.findOne({ '_id': userdetails._id }, function (err, user) { if (err) { this.body = "please login again , your session seems to have expired" } console.log(user.projects.owner.indexOf(_project.name)); if(user.projects.owner.indexOf(_project.name) == -1) { //This means the project is not yet created var temp_project = new Project(_project); temp_project.save(function save() { if(err) { that.body = "Project coudn't be saved, Please try again sometime later"; } else { user.projects.owner.push(_project.name); user.save(function save() { if (err) { that.body = "This error is highly unlikely, yet if you see this .Please report this issue"; } }); that.body = temp_project; } }); } if(user.projects.owner.indexOf(_project.name) >= 0) { //THis means the project exists that.body = "You have already created a project with same name, please use a different name"; console.log("you reached till here"); } });,node.js,generator,thunk,koa,Node.js,Generator,Thunk,Koa,这本应该在正常的express world中工作,但后来我意识到我需要以thunks的形式重写,所以我当前的尝试是 function userfindONE(err, user) { if (err) { return "please login again , your session seems to have expired" } if(user.projects.owner.indexOf(tproject.name) == -1) { //Th
function userfindONE(err, user) {
if (err) {
return "please login again , your session seems to have expired"
}
if(user.projects.owner.indexOf(tproject.name) == -1) { //This means the project is not yet created
var temp_project = new Project(tproject);
temp_project.save(function save() {
if(err) {
return "Project coudn't be saved, Please try again sometime later";
} else {
user.projects.owner.push(tproject.name);
user.save(function save() {
if (err) {
return "This error is highly unlikely, yet if you see this .Please report this issue";
}
});
return temp_project;
}
});
}
if(user.projects.owner.indexOf(tproject.name) >= 0) { //THis means the project exists
return "You have already created a project with same name, please use a different name";
} else return "nothing is matching";
}
function userfindone(userdetails) {
return function(cb) {
User.findOne({ '_id': userdetails._id }, cb);
};
}
var userdetails = this.req.user;
var tproject = yield parse(this);
但这将从第一次mongoose调用的user.findone返回用户详细信息。
其他任何事情似乎都被忽视了。谢谢
this.body = yield userfindone(userdetails)(userfindONE) ;
看一看。它应该像包装模式函数一样简单。使用Mongoose 3.9.x,您可以简单地
生成user.save()
,签入您的package.json您已经安装了不稳定的版本