pro*_*lex 22 javascript asynchronous node.js
任何人都可以帮我这个代码吗?我需要从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"));
Run Code Online (Sandbox Code Playgroud)
但我总是得到:0
我猜return roomId;之前已经执行过了roomId=results.creationix.room.有人可以帮我这个代码吗?
Ray*_*nos 44
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);
});
Run Code Online (Sandbox Code Playgroud)
你需要使用回调.这就是异步IO的工作原理.顺便说一句sys.puts,不推荐使用
Sim*_*nni 11
您试图以an asynchronous function同步方式执行,不幸的是not possible in Javascript.
正如您猜对的那样,roomId=results....当数据库的加载完成时执行....这是异步完成的,所以在完成代码的完成之后.
看看这篇文章,它谈到了.insert and not .find,但想法是一样的:http://metaduck.com/01-asynchronous-iteration-patterns.html
| 归档时间: |
|
| 查看次数: |
99611 次 |
| 最近记录: |