2013-03-31 45 views
-1

我有express3的node.js。node.js中的函數順序

對於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. 爲什麼節點調用__2第一,和__0,__1在__2之後,但行順序是其他?
  2. 如何把err,persons轉換成result
+1

因爲'db.person.findAll'是**異步**。看看[我的答案的第一部分](http://stackoverflow.com/a/14220323/218196)。任何必須與結果一起工作的東西必須在回調中。 –

+0

@FelixKling非常感謝。 – fend25

回答

1

findAll()是一個異步調用,您傳遞給它的函數是函數返回時執行的回調函數。像這樣重新排列以獲得預期的行爲;

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