从函数返回结果(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)的主要内容,如果未能解决你的问题,请参考以下文章

从JavaScript中的多个函数返回结果[重复]

Nodejs中异步函数的返回值

如何从请求中返回结果,以及在 NodeJS 中执行异步任务但没有回调之后

从javascript中的回调函数返回值? [复制]

nodejs函数中的返回值[重复]

nodejs试图从返回函数读取jpg数据流