在JS中等待Async
Wait for Async in JS
这是一个Express网站。
下面是我编写代码的方式。这只是一些附带的代码,让我试着让一些肮脏的工作:
指数/ routes.js
router.get('/', function(req, res) {
var sqlStatement = "Select top 10 from customers";
var rows = connection.invokeQuery(sqlStatement);
res.render('index', { title: 'My App', customers: rows});
});
module.exports = router;
问题是,在尝试将数据呈现给页面之前,它没有等待查询完成。我试着把它放到回调中,但还是不行。我需要一个承诺或者看守什么的吗?
router.get('/', function(req, res) {
var sqlStatement = "Select top 10 from customers";
var rows = connection.invokeQuery(sqlStatement, function(){
res.render('index', { title: 'My App', customers: rows});
});
});
我创建了这个方法:
connection.invokeQuery = function(sqlQuery){
...code before this
db.query(sqlQuery, function(err, rows){
if(rows ) {
data = rows;
console.log(rows);
}
if(err) { console.log(err); }
})
}
);
});
return data;
};
我注意到的另一件事是,在我的invokeQuery函数中,当我启动我的网站时,它立即击中了return data
。它甚至还没有击中我的sql查询。这是另一个问题。
我可能完全搞错了,但是我不知道如何处理这个可能非常常见的场景。
好,这很简单,算出来了。
var rows = connection.invokeQuery(sqlStatement, function(rows){
res.render('index', { title: 'Dave''s App', cobrands: rows});
});
connection.invokeQuery = function(sqlQuery, callback){
...code before this
db.query(sqlQuery, function(err, rows){
if(rows ) {
data = rows;
console.log(rows);
callback(rows);
}
if(err) { console.log(err); }
})
}
);
});
不确定您的数据库对象是什么样子,但您可能想要这样的东西,将数据库结果传递给回调。
connection.invokeQuery(sqlStatement, function(rows) {
res.render('index', { title: 'My App', customers: rows});
});
相关文章:
- Nodejs async.each 等待第一个循环
- Chrome扩展:等待元素加载(async js)
- Babel transpiles async但不等待
- 等待函数结束(在 async.series 中)无法按预期工作
- 如何等待findOneAndUpdate完成,然后再继续async.series
- 为什么 JavaScript 函数需要有关键字“async”?“等待”关键字还不够吗?
- 如何使用async.series来等待响应
- Jasmine 2.0 async beforeEach不等待async完成
- 在config被执行之前,等待async调用
- 嵌套async db调用for循环,等待直到循环完成
- 在循环的每次迭代中等待async .done()
- 如何在jquery中等待async完成
- Javascript:等待async完成
- 等待async函数结束
- 返回一个等待的值返回一个承诺?(es7 async /等待)
- 等待GetJSON async完成
- 让Jasmine等待Async函数完成
- 在启动Angular JS之前,等待Async Task完成
- 如果并发调用请求仍在加载数据,如何等待async angularJS调用完成
- 在JS中等待Async