return results from a function (javascript, nodejs)

后端 未结 2 420
情话喂你
情话喂你 2021-02-01 18:29

Could anyone help me with this code? I need to return a value form a routeToRoom function:

var sys = require(\'sys\');

function routeToRoom(userId, passw) {
            


        
相关标签:
2条回答
  • 2021-02-01 19:04

    You are trying to execute an asynchronous function in a synchronous way, which is unfortunately not possible in Javascript.

    As you guessed correctly, the roomId=results.... is executed when the loading from the DB completes, which is done asynchronously, so AFTER the resto of your code is completed.

    Look at this article, it talks about .insert and not .find, but the idea is the same : http://metaduck.com/01-asynchronous-iteration-patterns.html

    0 讨论(0)
  • 2021-02-01 19:26
    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);    
    });
    

    You need to use callbacks. That's how asynchronous IO works. Btw sys.puts is deprecated

    0 讨论(0)
提交回复
热议问题