Javascript 如何在Node.js中继续之前等待函数完成
我试图在Node.js/Express中创建一个路由,该路由从两个查询中读取数据,然后根据来自查询的数据增加一个计数。由于Node.js是异步的,所以在读取所有数据之前会显示我的总计 我创建了一个简单的例子,说明了我目前正在做的事情Javascript 如何在Node.js中继续之前等待函数完成,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我试图在Node.js/Express中创建一个路由,该路由从两个查询中读取数据,然后根据来自查询的数据增加一个计数。由于Node.js是异步的,所以在读取所有数据之前会显示我的总计 我创建了一个简单的例子,说明了我目前正在做的事情 var express = require('express'); var router = express.Router(); var total = 0; /* GET home page. */ router.get('/', function(req,
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合计=0;
/*获取主页*/
router.get('/',函数(req,res,next){
增量(3);
增量(2);
控制台日志(总计);
res.end();
});
变量增量=函数(n){
//等待n秒,然后再增加总数n次
setTimeout(函数(){
对于(i=0;i
我不确定要等到这两个函数都完成后再打印总数,我需要做什么。我是否必须创建自定义事件发射器才能实现此目标?采用异步:
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;
var express=require('express');
var router=express.router();
var合计=0;
/*获取主页*/
router.get('/',函数(req,res,next){
增量(3,function(){/您可以使用类似的库
代码如下:
var total = 0;
/* GET users listing. */
router.get('/', function(req, res) {
async.series([
function(callback){
increment(2, function(){
callback(null, "done");
});
},
function(callback){
increment(3, function(){
callback(null, "done");
});
}
],
function(err, result){
console.log(total);
res.send('respond the result:' + total);
});
});
var increment = function(n, callback){
//Wait for n seconds before incrementing total n times
setTimeout(function(){
for(var i = 0; i < n; i++){
total++;
}
callback();
}, n *1000);
};
var总计=0;
/*获取用户列表*/
router.get('/',函数(req,res){
异步系列([
函数(回调){
增量(2,函数(){
回调(空,“完成”);
});
},
函数(回调){
增量(3,函数(){
回调(空,“完成”);
});
}
],
函数(错误、结果){
控制台日志(总计);
res.send('响应结果:'+总计);
});
});
var增量=函数(n,回调){
//等待n秒,然后再增加总数n次
setTimeout(函数(){
对于(变量i=0;i
您传递回调。事件发射器也可以工作。或者承诺。将问题想象为必须“等待”直到某件事情发生错误。您更应该将其想象为“我如何知道X何时完成才能运行Y”。回调、事件或承诺都是该问题的解决方案。