回调函数问题-javascript/node.js

回调函数问题-javascript/node.js,javascript,node.js,Javascript,Node.js,我制作了一个投票应用程序,现在我试着检查用户是否已经对当前投票进行了投票。 我的问题我认为是一个回调函数,它不能在我想要的时间内工作。 我尝试了很多方法,读了很多关于回调和同步函数的书,但仍然不知道如何解决这个问题。 现在代码(都在同一路线上): 在这里,我找到了用户投票的投票: Poll.findById(req.params.id,function(err, poll){ //Find the Poll if(err){ console.log("

我制作了一个投票应用程序,现在我试着检查用户是否已经对当前投票进行了投票。 我的问题我认为是一个回调函数,它不能在我想要的时间内工作。 我尝试了很多方法,读了很多关于回调和同步函数的书,但仍然不知道如何解决这个问题。
现在代码(都在同一路线上):

在这里,我找到了用户投票的投票:

Poll.findById(req.params.id,function(err, poll){     //Find the Poll
       if(err){
           console.log("Vote(find the Poll) post err");
        }
        var test = function(poll,req){                            //check if user already vote to the poll
                if(req.user.local){//if it`s auth user
                    console.log("test");
                    User.findById(req.user._id,function(err, userFound){
                        if(err){
                            console.log("[checkVoted] Error findById");
                        }
                    for(var i=0;i<userFound.local.vote.poll_voted.length;i++){//run on poll_voted array
                        console.log("test for");
                        if(poll._id == userFound.local.vote.poll_voted[i]){
                            console.log("**return 1**");
                            return 1;//User already voted to this poll
                        }
                    }//end for
                    console.log("test return 0");
                    return 0;//user not voted
                    });//end user find
                } else{ //anonmey user 
                    console.log("[checkVoted] ELSE!");
                    return false;
                }//else end
            };//function end
现在用户选择选项并投票,它的enter to函数并记录“return 1”(有标记),但它没有输入IF(有标记),当然也没有输入else(有标记)…我做错了什么

编辑: 我尝试了这种方法,从日志中可以看出它是有效的,但现在我发现了另一个错误: 编辑2:已解决。此代码:(谢谢大家)

router.post(“/poll/:id/:option_id”),函数(req,res){
findById(req.params.id,函数(err,Poll){//查找轮询
如果(错误){
log(“投票(查找投票)post err”);
}
var测试=函数(轮询、请求、回调){
var标志=0;
if(req.user.local){//如果它是auth user
控制台日志(“测试”);
findById(req.User.\u id,函数(err,userFound){//查找用户id
如果(错误){
log(“[checkVoted]Error findById”);
}
for(var i=0;itest(poll,req)是一个同步函数,但在它内部有一个对函数User.findById(req.User)的异步引用。一个选项是传递回调函数

test(poll,req, function(param){ ... process return values from callback .... if case validations }) 测试(轮询、请求、功能(参数){ …进程从回调返回值 …如果案例验证 }) 叫它进来

var test = function(poll,req, cb){ User.findById(req.user._id,function(err, userFound){ if(err){ console.log("[checkVoted] Error findById"); } ...for loop cb(param) } } var测试=功能(轮询、请求、cb){ User.findById(请求用户id,函数(err,userFound){ 如果(错误){ log(“[checkVoted]Error findById”); } …用于循环 cb(参数) } }
可能重复谢谢,但我读了这篇文章,尝试了一些方法,但现在仍然有效。然后你应该再读一遍。你仍然试图从异步调用返回,这是没有意义的。所有的例子与我的问题不同,我试着运行一个函数,返回一个值到IF,如果函数做了一件事,我在哪里找到回调@YuryTarabanko“示例与我的问题不一样”-是的。“我尝试运行一个返回值的函数”您不能从异步函数返回普通值。例如,您可以向测试函数添加
回调
参数,并将整个
if
移动到回调中。或者熟悉避免回调地狱的承诺。谢谢!我想这是可行的。我现在编辑这个问题 test(poll,req, function(param){ ... process return values from callback .... if case validations }) var test = function(poll,req, cb){ User.findById(req.user._id,function(err, userFound){ if(err){ console.log("[checkVoted] Error findById"); } ...for loop cb(param) } }