首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将回调转换为thunk

将回调转换为thunk
EN

Stack Overflow用户
提问于 2014-03-20 22:33:35
回答 2查看 1.5K关注 0票数 1

我正在使用带有koa.js的mongoose (也许是一个糟糕的选择,但我不得不坚持)。我最初的回调函数是:

代码语言:javascript
运行
复制
 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世界中应该是有效的,但是后来我意识到我需要以thunk的形式重写,所以我现在的尝试是

代码语言:javascript
运行
复制
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返回用户详细信息。而其他任何东西似乎都被忽略了。谢谢

代码语言:javascript
运行
复制
this.body = yield userfindone(userdetails)(userfindONE) ;
EN

回答 2

Stack Overflow用户

发布于 2014-04-16 10:47:43

看看node-thunkify吧。它应该和用它包装模式的函数一样简单。

票数 1
EN

Stack Overflow用户

发布于 2014-12-11 05:47:23

使用Mongoos3.9.x,你可以简单的yield user.save(),检查你的package.json,你已经安装了不稳定的版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22536156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档