从函数返回结果(javascript、nodejs)
Posted
技术标签:
【中文标题】从函数返回结果(javascript、nodejs)【英文标题】:return results from a function (javascript, nodejs) 【发布时间】:2011-11-07 12:43:03 【问题描述】:有人可以帮我处理这段代码吗?我需要从 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
之前执行。有人可以帮我处理这段代码吗?
【问题讨论】:
【参考方案1】: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
已弃用
【讨论】:
是否存在这样的格式?var roomId = takeRoom("alex","123");我的问题是我需要将结果保存到“全局”变量中才能在其他函数中使用。谢谢! @profesoralex 你做错了。重写你的代码。节点是异步的。学习异步编写。【参考方案2】:您正在尝试以同步方式执行an asynchronous function
,不幸的是not possible in javascript
。
正如您猜对的那样,roomId=results
.... 在从数据库加载完成时执行,这是异步完成的,因此在您的代码恢复完成之后。
看这篇文章,讲的是.insert and not .find
,但思路是一样的:http://metaduck.com/01-asynchronous-iteration-patterns.html
【讨论】:
感谢您的回复,安杰!链接metaduck.com/post/2675027550/… 失效了,你有其他来源吗?谢谢! 我刚刚重新格式化了你的问题; Simone 提供了这个答案(你可以从右边的名字看出,就在这些 cmets 的上方)。 奇怪,它从这里开始工作.. 但是,在谷歌上搜索“nodejs 异步模式”,你会找到一些文章。以上是关于从函数返回结果(javascript、nodejs)的主要内容,如果未能解决你的问题,请参考以下文章