【发布时间】:2025-12-11 07:25:02
【问题描述】:
我不熟悉承诺,可能做错了什么。我正在使用 Mongodump 备份 MongoDB 实例。一切正常,但是堆栈跟踪有一个小问题。在一个函数中,应该在主进程中使用 async/await 等待我正在创建一个新的 Promise。在我调用的函数结束时(删掉开头):
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 发出关闭事件时拒绝了错误。程序之前崩溃了,我怎么能抓住它?
非常感谢! :)
【问题讨论】:
标签: javascript node.js promise async-await