2013-08-25 47 views
0

我有以下代碼:Node.js的異步一致性

server.use(function(req, res, next) { 
    users_db.set(req.user, function(err) { // async call to mongodb 
     if (err) { 
      console.error(err); 
     } 
     }); 
    } 
    return next(); 
}); 

server.get('/', function(req, res) { 
    req.user.active = true; // this is a new field in user object 
    res.send(req.user); 
    } 
}); 

所以,正如你看到的,當users_db.set()被調用,req.user沒有active=true領域。它僅被插入在server.get()函數中。

是否有可能user.active = true在db中註冊,因爲調用的異步性質?

+1

可能是的,但不能保證。你想做什麼?中間件可能是錯誤的工具。 – Bergi

回答

0

據我所知(至少在Express中是這樣的).get方法接受許多中間件函數。所以我想,下面的工作:

server.get(
    '/', 
    function(req, res, next) { 
     req.user.active = true; // this is a new field in user object 
     res.send(req.user); 
     next(); 
    }, 
    function(req, res, next) { 
     users_db.set(req.user, function(err) { // async call to mongodb 
      if (err) { 
       console.error(err); 
      } 
      }); 
     } 
     return next(); 
    } 
); 

這樣做就像你確信req.user.active總是填充之前到達與users_db.set瞬間的事情。

+0

我明白了。我可以找到解決方法,只是想了解行爲。謝謝 – Michael