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




函数返回值 (2)

您正试图以同步方式执行an asynchronous function ,遗憾的是not possible in Javascript

正如您猜对的那样,当数据库的加载完成时,执行roomId=results ....这是异步完成的,所以在完成代码的完成之后。

看看这篇文章,它讨论的是.insert and not .find ,但这个想法是一样的: http://metaduck.com/01-asynchronous-iteration-patterns.html.insert and not .find

https://code.i-harness.com

任何人都可以帮我这个代码吗? 我需要从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之前执行。 有人可以帮我这个代码吗?


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的工作原理。 Btw sys.puts已弃用







asynchronous