Я новичок в обещаниях и, вероятно, делаю что-то не так. Я делаю резервную копию экземпляра MongoDB, используя Mongodump. Все работает нормально, однако у меня возникла небольшая проблема с трассировкой стека. В функции, которую следует ожидать, используя async / await в основном процессе, я создаю новое обещание. В конце вызываемой функции (Вырежьте начало):
backupDB(collection) {
return new Promise((resolve, reject) => {
let backupLog = [];
backupLog.push({
time: moment(),
msg: `Backup for ${collection} started`
});
let spawnArguments = [
'--host', 'localhost',
'--port', portProd,
'--collection', collection,
'--db', dbNameProd,
'--out', dumpPath
];
const spawnprocess = spawn(mongodumpPath, spawnArguments,
{shell: true}
);
spawnprocess.on('close', (code) => {
if (code === 0) {
backupLog.push({
time: moment(),
msg: `Backup for ${collection} finished`
});
resolve(backupLog);
} else {
backupLog.push({
time: moment(),
msg: `Backup for ${collection} failed`
});
reject(backupLog);
}
});
Переменная mongodumpPath намеренно не определена (для демонстрации), но когда я запускаю функцию внутри try catch, ошибка не выдается:
try {
log = log.concat(await this.backupDB('ops', {regDate: {$gte: {$date: fromDate}, $lte: {$date: toDate}}}));
} catch (e) {
log = log.concat(e);
return log;
}
Если я позвоню
this.backupDB('ops', {regDate: {$gte: {$date: fromDate}, $lte: {$date: toDate}}})
трассировка стека брошена в консоль. Я предполагаю, что это из-за того, что я только отклоняю ошибку, когда spawnprocess генерирует событие закрытия. Однако раньше программа вылетает, так как я могу это поймать?
Большое спасибо! :)