Похоже, вы уже видите, что исправление getPromise = getPromise.then(...)
. Я подумал, что просто добавлю, что этот тип кода выглядит немного чище, если вы DRY создадите справочную таблицу вместо большого if/else
и перебираете список символов, накапливающих цепочку обещаний, звучит как работа для .reduce()
.
let getPromise = get(srcBucket, srcKey); // Get the image
const transformMap = {
B: blur,
R: resize,
O: rotate,
S: sepia,
C: compress
};
//Apply transformations to image.
getPromise = transformations.split("").reduce((p, op) => {
let fn = transformMap[op];
if (fn) {
return p.then(image => fn(image));
} else {
return p;
}
}, getPromise);
return getPromise.then(modified => put(destBucket, destKey, modified))
.then(() => putSAAFOutput(inspector))
.then(() => {
console.log('Success');
return 'Success';
})
.catch(error => {
console.error(error);
throw error;
});
Кроме того, тот факт, что вы используете somePromise.then(resolve).catch(reject)
в конце цепочки обещаний, по-видимому, означает, что вы завернули все это в свои new Promise()
. Делать это - обещание анти-паттерна и не нужно. Вместо этого вы можете просто вернуть обещание, которое у вас уже есть. Вместо resolve('Success');
вы можете просто сделать return 'Success'
. И вместо reject(error);
вы можете просто сделать throw error
.