从函数返回结果(javascript,nodejs)

任何人都可以帮我用这个代码? 我需要返回一个值的formsrouteToRoom函数:

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

你需要使用callback。 这就是asynchronousIO的工作原理。 顺便说一句sys.puts已被弃用

你正试图以同步的方式执行an asynchronous function ,这not possible in Javascriptnot possible in Javascript

正如你所猜测的那样,当从数据库加载完成时, roomId=results ….被执行,这是asynchronous完成的,因此完成代码的恢复之后。

看这篇文章,它讨论.insert and not .find ,但是这个想法是相同的: http : .insert and not .find