暂停javascript代码直到另一个函数终止时出现问题
我使用Node.js中的以下代码使用promise调用数据库查询。那部分很好用。我正在尝试“暂停”脚本执行,直到数据库查询完成…这是导致问题的部分 我的代码:暂停javascript代码直到另一个函数终止时出现问题,javascript,node.js,delay,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/queri
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);
});
}
这里可以看到控制台中的输出。初始的“Async success!”打印后是对象的输出(由数据库调用返回),这是应该的。此外,当'resolved'(.then)语句完成时,我看到'isPaused'变量被更改为“0”…这是应该的…但是,一切似乎都“挂起”…我没有看到任何“DATABASE CALL COMPLETED”的日志打印输出以及当时应该填充的关联数组
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...???
如何修改我的代码以便正确地等待数据库调用完成(例如,'u line_update()'反过来调用'db.getMembers')。。。?提前感谢您的建议。让
\u line\u update
退回承诺,然后等待它(或者打电话给。然后放在承诺上,把所有东西都放在里。然后)谢谢您的回复。不确定你所说的“让我们更新并返回承诺”是什么意思。。。?您的意思是直接将数据库承诺调用放在该函数中。。。?换句话说,消除“db.getMembers”调用并将“\u line\u update”移动到我的“querys”脚本中…?您的\u line\u update
返回一个承诺,但您没有对它做任何操作。你需要归还它并在外面消费。我想这就是.then和.catch正在做的事情…按照承诺行事(或者“解决”或者“拒绝”)。。。?抱歉,我对使用承诺有点陌生…是的,但它们都在函数中。由于您希望异步操作在外部被观察和执行,因此需要返回承诺。