从Javascript中的回调函数返回

时间:2023-02-12 09:56:54

How do I get the return value from inside a value of node.js/javascript callback?

如何从node.js / javascript回调值中获取返回值?

function get_logs(){
    User_Log.findOne({userId:req.user._id}, function(err, userlogs){
        if(err) throw err;
        if(userlogs){
            // logs = userlogs.logs;
            return "hello there is a logs";
        } else {
            return "there is no logs yet..."
        }
    })
}

var logs = get_logs();
console.log(logs);

4 个解决方案

#1


3  

You can't return the result from a function whose execution is asynchronous.

您不能从执行异步的函数返回结果。

The simplest solution is to pass a callback :

最简单的解决方案是传递回调:

function get_logs(cb){
    User_Log.findOne({userId:req.user._id}, function(err, userlogs){
        if(err) throw err;
        if(userlogs){
            // logs = userlogs.logs;
            cb("hello there is a logs");
        } else {
            cb("there is no logs yet...)"
        }
    })
}

get_logs(function(logs){
    console.log(logs);
});

#2


0  

You can't. You should instead pass another callback to your function. Something like this:

你不能。您应该将另一个回调传递给您的函数。像这样的东西:

function get_logs(callback){
    User_Log.findOne({userId:req.user._id}, function(err, userlogs){
        if(err) throw err;
        if(userlogs){
            callback("hello there is a logs");
        } else {
            callback("there is no logs yet...");
        }
    })
}

get_logs(function(arg1) {
   console.log(arg1);
});

#3


0  

function get_logs(callback) {
    User_Log.findOne({
        userId: req.user._id
    }, function (err, userlogs) {
        if (err) throw err;
        if (userlogs) {
            // logs = userlogs.logs;
            callback("hello there is a logs");
        } else {
            callback("there is no logs yet...");
        }
    })
}

get_logs(function (data) {
    console.log(data);
});

Uses callbacks...

使用回调...

#4


0  

In node.js almost all the callbacks run after the function returns , so you can do something like this

在node.js中,几乎所有的回调都在函数返回后运行,所以你可以这样做

function get_logs(){
    User_Log.findOne({userId:req.user._id}, function(err, userlogs){
        if(err) throw err;
        if(userlogs){
            // logs = userlogs.logs;
               do_something(logs)
        } else {
            console.log('No logs')
        }
    })
}

#1


3  

You can't return the result from a function whose execution is asynchronous.

您不能从执行异步的函数返回结果。

The simplest solution is to pass a callback :

最简单的解决方案是传递回调:

function get_logs(cb){
    User_Log.findOne({userId:req.user._id}, function(err, userlogs){
        if(err) throw err;
        if(userlogs){
            // logs = userlogs.logs;
            cb("hello there is a logs");
        } else {
            cb("there is no logs yet...)"
        }
    })
}

get_logs(function(logs){
    console.log(logs);
});

#2


0  

You can't. You should instead pass another callback to your function. Something like this:

你不能。您应该将另一个回调传递给您的函数。像这样的东西:

function get_logs(callback){
    User_Log.findOne({userId:req.user._id}, function(err, userlogs){
        if(err) throw err;
        if(userlogs){
            callback("hello there is a logs");
        } else {
            callback("there is no logs yet...");
        }
    })
}

get_logs(function(arg1) {
   console.log(arg1);
});

#3


0  

function get_logs(callback) {
    User_Log.findOne({
        userId: req.user._id
    }, function (err, userlogs) {
        if (err) throw err;
        if (userlogs) {
            // logs = userlogs.logs;
            callback("hello there is a logs");
        } else {
            callback("there is no logs yet...");
        }
    })
}

get_logs(function (data) {
    console.log(data);
});

Uses callbacks...

使用回调...

#4


0  

In node.js almost all the callbacks run after the function returns , so you can do something like this

在node.js中,几乎所有的回调都在函数返回后运行,所以你可以这样做

function get_logs(){
    User_Log.findOne({userId:req.user._id}, function(err, userlogs){
        if(err) throw err;
        if(userlogs){
            // logs = userlogs.logs;
               do_something(logs)
        } else {
            console.log('No logs')
        }
    })
}