2013-10-23 115 views
0

如何從node.js/javascript回調的值中獲取返回值?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); 
+0

如果它是異步調用的,則不能。使用另一個回調。 – Bergi

回答

3

您不能從執行異步的函數返回結果。

最簡單的辦法是通過一個回調:

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

你不能。您應該將另一個回調傳遞給您的函數。事情是這樣的:

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

用途回調...

0

在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') 
     } 
    }) 
}