从函数返回结果(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 Javascript
是not possible in Javascript
。
正如你所猜测的那样,当从数据库加载完成时, roomId=results
….被执行,这是asynchronous完成的,因此完成代码的恢复之后。
看这篇文章,它讨论.insert and not .find
,但是这个想法是相同的: http : .insert and not .find
- 在使用Promise.all()forEach呈现NodeJS页面之前,先加载Firebase数据,
- asynchronous如何处理Javascript中的variables?
- async.waterfall里面的async.apply
- 无法find一个简单的方法出了多个asynchronous的每个节点js(帆)
- 使用For循环迭代asynchronous函数(db query,Node.js)
- 为什么node.js是asynchronous的?
- 节点的JS – 如何告诉如果一个套接字已经打开与Einaros WS套接字模块?
- 使用请求和gm模块在NodeJS中下载后立即调整图像大小
- 未处理的拒绝错误。 即使testing通过