bull 中 job 的 moveToFailed 和 moveToCompleted 虽然非常像,都调用了 moveToFinished 方法
但实际上 moveToFailed 还有其它的复杂处理逻辑
首先会保存错误和调用堆栈
Job.prototype.moveToFailed = async function(err, ignoreLock) {
err = err || { message: 'Unknown reason' };
this.failedReason = err.message;
await this.queue.isReady();
let command;
const multi = this.queue.client.multi();
this._saveAttempt(multi, err);
_saveAttempt 将 attemptsMade++, stacktrace 和 failedReason 保存到 job 数据的 hash 中
Job.prototype._saveAttempt = function(multi, err) {
this.attemptsMade++;
const params = {
attemptsMade: this.attemptsMade
};
if (this.opts