Я выполняю несколько обещаний со следующим фрагментом:
await Promise.all([promise1, promise2, promise3]);
Чего я хотел бы добиться, так это откатить эффект успешных обещаний в случае сбоя с Promise.all()
.Говоря более конкретно, это означает, что вышеописанное будет выполнять некоторые шифрования файлов, но если произойдет сбой одного из них, я хотел бы удалить два других (или один) файла, которые были успешно зашифрованы, чтобы иметь согласованные и чистые группы файлов.
Из того, что я прочитал, это означает, что мне потребуется два шага: 1. Перехват ошибок для каждого обещания, чтобы Promise.all()
не выдавал ошибку.2. Загадочная часть: наличие другого Promise.all()
вида:
await Promise.all([rollbackPromise1, rollbackPromise2, rollbackPromise3]);
Эта часть кажется сложной: нужно ли выполнять все откаты независимо от того, что обещание не выполнено?Это означает, что я должен сделать еще один перехват для каждой ошибки, так что Promise.all()
ждет завершения каждого отката.
Это лучший способ сделать это, я считаю его довольно неэффективным и уродливым с точки зрения кода.