我正在构建一些Node.js应用,并具有如下功能:
update tablename
set Symbology_BBL = case
when last_edited_date between GETUTCDATE() -7 and GETUTCDATE()
then 'Week 1'
when last_edited_date between GETUTCDATE() - 14 and GETUTCDATE() - 8
then 'Week 2'
else 'Greater Than Week 3'
end
我只希望该函数严格执行(将变量更改为false,执行循环,然后将变量更改为true)
我发现这并不像看起来那样容易,所以我寻求您的帮助。
有没有办法做到这一点?预先感谢。
答案 0 :(得分:1)
您可以使用Promise
确保超时首先解决,然后在所有承诺解决后记录下一个条件。
let allowUA = false;
let arr = [1, 2, 3]
function ex() {
allowUA = false;
console.log('false');
// iterate over the array and create a promise for each iteration
let promises = arr.map(function(value, index) {
return new Promise(function(resolve) {
setTimeout(() => {
console.log(index);
// resolve the promise
resolve();
}, index * 500);
});
})
// run this when all the promises resolve themselves
Promise.all(promises).then(function() {
allowUA = true;
console.log('true');
});
}
ex()
答案 1 :(得分:0)
这是一个async/await
方法,该方法放弃了for / loop,转而使用setTimeout
调用了一个函数,该函数具有一个缓慢缩短的数组:
async function ex(arr) {
allowUA = false;
console.log(allowUA);
function logger(arr) {
return new Promise((resolve, reject) => {
(function loop(arr) {
const [head, ...rest] = arr;
if (!arr.length) {
resolve();
} else {
console.log(head);
setTimeout(() => loop(rest), head * 1000);
}
}(arr));
});
};
await logger(arr);
allowUA = true;
console.log(allowUA);
}
const arr = [1, 2, 3, 4];
ex(arr);