javascript - 从函数返回结果(javascript、nodejs)

标签 javascript node.js asynchronous

有人可以帮我处理这段代码吗?我需要从 routeToRoom 函数返回一个值:

var sys = require('sys');

function routeToRoom(userId, passw) {
    var roomId = 0;
    var nStore = require('nstore/lib/nstore').extend(require('nstore/lib/nstore/query')());
    var users = nStore.new('data/users.db', function() {

        users.find({
            user: userId,
            pass: passw
        }, (function(err, results) {
            if (err) {
                roomId = -1;
            } else {
                roomId = results.creationix.room;
            }
        }
        ));
    });
    return roomId;
}
sys.puts(routeToRoom("alex", "123"));

但我总是得到:0

我猜 return roomId;roomId=results.creationix.room 之前执行。有人可以帮我处理这段代码吗?

最佳答案

function routeToRoom(userId, passw, cb) {
    var roomId = 0;
    var nStore = require('nstore/lib/nstore').extend(require('nstore/lib/nstore/query')());
    var users = nStore.new('data/users.db', function() {
        users.find({
            user: userId,
            pass: passw
        }, function(err, results) {
            if (err) {
                roomId = -1;
            } else {
                roomId = results.creationix.room;
            }
            cb(roomId);
        });
    });
}
routeToRoom("alex", "123", function(id) {
    console.log(id);    
});

您需要使用回调。这就是异步 IO 的工作原理。顺便说一句 sys.puts 已弃用

关于javascript - 从函数返回结果(javascript、nodejs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7255956/

相关文章:

JavaScript/JQuery GetDay()

javascript - PHP 和 MySQL : Update not working with Foreach Loop

javascript - Node.js - 如何初始化/定义 req.body?

javascript - 如何使用 jQuery 异步上传文件?

angularjs - Angular UI Bootstrap Typeahead - 未显示异步结果

javascript - jQuery/JS 获取文本区域的滚动条高度

javascript - 使用 CKEditor 在 setData 和模式更改时重置监听器事件

node.js - Bootstrap 4 导航栏折叠溢出。 Express/Node 部分

node.js - Telegram 机器人 - 删除键盘 - Nodejs

c# - 异步 - 等待直到有人尝试连接