gpt4 book ai didi

node.js - 将回调转换为 thunk

转载 作者:太空宇宙 更新时间:2023-11-03 23:41:41 24 4
gpt4 key购买 nike

我正在将 mongoose 与 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 世界中有效,但后来我意识到我需要以 thunk 的形式重写,所以我当前的尝试是

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) ;

最佳答案

看看node-thunkify 。它应该像用它包装架构的函数一样简单。

关于node.js - 将回调转换为 thunk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22536156/

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