我正在尝试在Node.js / Express中创建一个路由,该路由从两个查询中读取数据,然后基于来自查询的数据来增加计数。由于Node.js是异步的,因此在读取所有数据之前会显示总计。
我创建了一个简单的示例,以达到我目前正在做的事情
var express = require('express'); var router = express.Router(); var total = 0; /* GET home page. */ router.get('/', function(req, res, next) { increment(3); increment(2); console.log(total); res.end(); }); var increment = function(n){ //Wait for n seconds before incrementing total n times setTimeout(function(){ for(i = 0; i < n; i++){ total++; } }, n *1000); }; module.exports = router;
我不确定要等到两个功能都完成后才能打印总计,我该做什么。我是否需要创建一个自定义事件发射器来实现这一目标?
拥抱异步性:
var express = require('express'); var router = express.Router(); var total = 0; /* GET home page. */ router.get('/', function(req, res, next) { increment(3, function() { // <=== Use callbacks increment(2, function() { console.log(total); res.end(); }); }); }); var increment = function(n, callback){ // <=== Accept callback //Wait for n seconds before incrementing total n times setTimeout(function(){ for(i = 0; i < n; i++){ total++; } callback(); // <=== Call callback }, n *1000); }; module.exports = router;
或使用Promise库或使用事件。最后,它们都是语义稍有不同的异步回调机制。