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 将回调转换为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

这本应该在正常的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) { //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您已经安装了不稳定的版本