此代碼是否遵守NodeJS異步處理方式?它完全正常工作,但我不明白爲什麼res.render
在Database.findOne
回調中,而不在Database.aggregate
回調中,即使我使用Database.findOne
和Database.aggregate
的結果。這段代碼爲什麼工作? (NodeJS/Express異步回調)
但是,如果我把res.render
的Database.aggregate
和Database.findOne
兩個之外,但仍然是router.get
回調裏面,那麼代碼將不能在所有(編輯工作:當然,在這種情況下,我宣佈變量在數據庫查詢之外)。怎麼來的?什麼是正確的NodeJS做事方式?
由於
var _ = require('lodash');
var express = require('express');
var Database = require('../models/database');
var router = express.Router();
router.get('/:XXXX', function(req, res, next) {
var XXXX = req.params.XXXX;
var aggregationResults;
Database.aggregate([
// pipeline
], function(err, results) {
aggregationResults = results;
if (err) return next(err);
});
Database.findOne({XXXX: XXXX}, function(err, XXXXresult){
if(err) return next(err);
res.render('page', {XXXXresult: XXXXresult, aggregationObject : aggregationResults[0]});
});
});
嘗試閱讀關於範圍 https://github.com/getify/You-Dont-Know-JS/blob/master/scope%20%26%20closures/ch5.md –
@AhmadRezk是的,當然,變量在正確的範圍內聲明。 – Emilio