从函数返回的结果(javascript中,的NodeJS) [英] return results from a function (javascript, nodejs)

查看:318
本文介绍了从函数返回的结果(javascript中,的NodeJS)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

谁能帮我这个code?我需要返回一个值形成routeToRoom功能:

  VAR SYS =要求('SYS');  功能routeToRoom(用户ID,PASSW){
      变种roomId = 0;
      VAR nStore =要求('nstore / lib目录/ nstore')扩展(需要('nstore / lib中/ nstore /查询)());
      VAR用户= nStore.new(数据/ users.db',函数(){          users.find({
              用户:用户ID
              传:PASSW
          },(功能(错了,结果){
              如果(ERR){
                  roomId = -1;
              }其他{
                  roomId = results.creationix.room;
              }
          }));
      });
      返回roomId;
  }
  sys.puts(routeToRoom(亚历克斯,123));

不过,我总是得到:0

我猜返回roomId; 之前 roomId = results.creationix.room 执行。可能有人能帮我解决这个code?


解决方案

 函数routeToRoom(用户ID,PASSW,CB){
    变种roomId = 0;
    VAR nStore =要求('nstore / lib目录/ nstore')扩展(需要('nstore / lib中/ nstore /查询)());
    VAR用户= nStore.new(数据/ users.db',函数(){
        users.find({
            用户:用户ID
            传:PASSW
        },功能(错了,结果){
            如果(ERR){
                roomId = -1;
            }其他{
                roomId = results.creationix.room;
            }
            CB(roomId);
        });
    });
}
routeToRoom(亚历克斯,123,功能(ID){
    的console.log(ID);
});

您需要使用回调。这就是IO如何异步工作。顺便说一句 sys.puts 是德precated

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) {
      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"));

But I get always: 0

I guess return roomId; is executed before roomId=results.creationix.room. Could someone help me with this code?

解决方案

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

这篇关于从函数返回的结果(javascript中,的NodeJS)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆