[英]unable to use sleep or pause in node js
我正在嘗試在節點 js 中的 MySQL 數據庫中進行簡單搜索,並希望在模板上發送搜索結果。
app.post('/result', jsonParser, function(req, res) {
var sol = []
var ins= []
var val= req.body.typeahead
connection.query('SELECT Sol_name from solutions where Sol_name like "%'+val+'%"', function(err, rows, fields) {
if (err) throw err;
for(i=0;i<rows.length;i++)
{
sol.push(rows[i].Sol_name);
}
res.end(JSON.stringify(sol));
});
connection.query('SELECT ins_name from installtions where ins_name like "%'+val+'%"', function(err, rows, fields) {
if (err) throw err;
for(i=0;i<rows.length;i++)
{
ins.push(rows[i].ins_name);
}
res.end(JSON.stringify(ins));
});
var context={
sol:sol,
ins:ins
}
//Above context going blank
res.render('pages/search',context);
});
現在的問題是,當我執行此代碼時,它正在發送空白 sol 和 ins 數組,因為它沒有等待完成從數據庫部分的獲取。
這是由於 node js 異步特性。 我該如何解決這個問題
我也在渲染到模板之前嘗試睡眠,但睡眠在節點 js 中不起作用。
請幫忙
app.post('/result', jsonParser, function(req, res) {
var sol = []
var val= req.body.typeahead
connection.query('SELECT Sol_name from solutions where Sol_name like "%'+val+'%"', function(err, rows, fields) {
if (err) throw err;
for(i=0;i<rows.length;i++)
{
sol.push(rows[i].Sol_name);
}
var context= {sol:sol}
res.render('pages/search',context);
});
});
query
與您的下一個指令異步發生。 所以執行回調里面的代碼。 如果 .query 返回一個 promise,那么你可以使用 .then() 或 async/await。
此外,如果刪除行 res.end 因為它會在您呈現頁面之前結束連接。 (如果使用異步/等待)
你可以用async/await
做到這一點。
app.post('/result', jsonParser, async function(req, res) {
^^^^^
var sol = []
var val= req.body.typeahead
let temp = await connection.query('SELECT Sol_name from solutions where Sol_name like "%'+val+'%"', function(err, rows, fields) {
if (err) throw err;
for(i=0;i<rows.length;i++)
{
sol.push(rows[i].Sol_name);
}
res.end(JSON.stringify(sol));
});
var context={
sol:sol
}
//Above context going blank
res.render('pages/search',context);
});
您可以使用它來異步:
sleep = function (ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
然后
while(true){
await sleep(100);
// do wathever
if( conditions ){
break;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.