【问题标题】:function order in node.js [duplicate]node.js中的函数顺序[重复]
【发布时间】:2013-03-31 12:38:14
【问题描述】:

我有 node.js 和 express3。

对于 mongodb 的使用,我需要 mongo-lazy 包。

所以,我有一个简单的 GET 路由器:

var db = require('mongo-lazy').open({
    db: 'somedb',
    host: '127.0.0.1',
    port: 27017,
    user: 'someuser',
    password: 'somepassword'
});

var result={};

db.person.findAll({}, function (err, persons) {
    result.err=err; 
    result.persons=persons;
    console.log("__0: " + typeof persons);
    console.log("__1: " + typeof result.persons);
});
console.log("__2: " + typeof result.persons);

if (!result.err) res.send("test");

控制台是:

Express server listening on port 3000
__2: undefined
GET /mongo 200 1508ms - 5
__0: object
__1: object

所以,问题是:

  1. 为什么node先调用__2,再调用__0、__1在__2之后,而行序却是其他的?
  2. 如何将errpersons放入result

【问题讨论】:

  • 因为db.person.findAll异步。看看first part of my answer here。任何必须处理结果的东西都必须在回调内部
  • @FelixKling 非常感谢。

标签: javascript node.js mongodb express


【解决方案1】:

findAll() 是一个异步调用,传递给它的函数是函数返回时要执行的回调。像这样重新排列以获得预期的行为;

db.person.findAll({}, function (err, persons) {
    if (!err) res.send(persons);
});

【讨论】:

    猜你喜欢
    • 2016-04-01
    • 1970-01-01
    • 2013-04-19
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    相关资源
    最近更新 更多