gpt4 book ai didi

node.js - 如何在 promise 内停止进程nodejs

转载 作者:太空宇宙 更新时间:2023-11-03 23:20:19 26 4
gpt4 key购买 nike

我创建了nodejs来触发(使用cronjobs)firebase实时数据库,如下所示:

var db = admin.database();
var ref = db.ref('myusers');

var promises = [];

function updateUnlocked(isLocked, locked, msisdn) {
return new Promise(function (resolve, reject) {
if (isLocked === 1) {
var startDate = moment(locked);
var endDate = moment();
var result = endDate.diff(startDate, 'minutes');
if (result > 5) {
var ref = db.ref('myusers/' + msisdn);
ref.update({isLocked: 2});
}
}
resolve('done');
});
}

ref.once('value', function(snapshot) {
snapshot.forEach(childSnapshot => {
promises.push(updateUnlocked(childSnapshot.val().isLocked, childSnapshot.val().locked, childSnapshot.key));
});
});


Promise.all(promises).then(function(data) {
console.log(data);
}).catch(function(err) {
console.log('error');
});

请告诉我在哪里可以添加 process.exit()。谢谢。

最佳答案

您必须等待“once”回调执行。否则,promise 数组为空,进程可能会立即退出。

var db = admin.database();
var ref = db.ref('myusers');


function updateUnlocked(isLocked, locked, msisdn) {
...
}

ref.once('value', function(snapshot) {
const promises = snapshot.map(childSnapshot => {
return updateUnlocked(childSnapshot.val().isLocked, childSnapshot.val().locked, childSnapshot.key);
})
Promise.all(promises).then(() => {
console.log('done')
process.exit(0)
}).catch(err => {
console.log('error', err)
process.exit(1)
})
});

演示控制流程。

setTimeout(() => {
const x = [1, 2, 3]
const promises = x.map(i => {
return new Promise(resolve => resolve(i))
})
Promise.all(promises).then(() => {
console.log('done. process.exit(0) here')
})
}, 200)

关于node.js - 如何在 promise 内停止进程nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50677775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com