无法暂停javascript代码,直到另一个功能终止

时间:2019-11-18 05:11:00

标签: javascript node.js delay

我正在Node.js中使用以下代码来使用Promise调用数据库查询。那部分工作正常。我正在尝试“暂停”脚本执行,直到数据库查询完成为止……这就是导致问题的原因。

我的代码:

var _startup = 1;  //toggle to check database on web server reboots...
var isPaused = 1;  //toggle to 'delay' database call function...
const db = require('./routes/queries');

app.get('/lookup', function (req, res) {

 if (_startup === 1) {
 isPaused = 1;
 _line_update();  //create/update member status arrays...

  //'delay' until '_line_update()' has completed...
  function waitForIt(){
   if (isPaused === 1) {
   setTimeout(function(){waitForIt()},100);
   } else {
   console.log("DATABASE CALL COMPLETED...");
   console.log(lineup);  
   console.log(picture);
   console.log(present);
   };
  }

 _startup = 0;  //toggle 'off'
 }

});

function _line_update() {
lineup = []; 
picture = []; 
present = [];  //create an 'empty' array EACH CALL...  

 //**Query PostGres database...using a promise

 db.getMembers()
 .then(function(value) {
 console.log('Async success!', value);
 console.log('length of value passed from database query: ' + value.length);

 //...DO STUFF HERE TO POPULATE ARRAYS ('lineup', 'picture', 'present') 

 isPaused = 0;
 console.log("isPaused at function call ending: " + isPaused);
 })
 .catch(function(err) {
 console.log('Caught an error!', err);
 });

}

在这里可以看到控制台中的输出。最初的“异步成功!”根据需要打印,然后打印对象的输出(由数据库调用返回)。另外,当'resolved'(.then)语句完成时,我看到'isPaused'变量被更改为“ 0”,因为它应该...但是一切似乎都挂起了...我看不到我的“数据库调用已完成”的所有日志打印输出以及应该在那时填充的关联数组...

Async success! [ { name: 'administration',
pass: 'peace',
status: 'active',
login: '2090',
logout: 'na',
service: 'both',
lucky: 'na',
picture: null,
picturex: null,
city: null,
state: null,
legacy: 'na' } ]
length of value passed from database query: 1
isPaused at function call ending: 0
//HANGS HERE AT THIS POINT...???

如何修改我的代码,以便正确地等待数据库调用完成(即“ _line_update()”,然后依次调用“ db.getMembers”)...?预先感谢您的任何建议。

0 个答案:

没有答案