Пропустить одно из обещаний, если переменная не определена
У меня есть ситуация, когда я хочу работать с несколькими обещаниями.
Предположим, у меня есть 3 переменные
fileOption, setupOptions, moveOption
основываться на каждой переменной, я запрашиваю функции, такие как
file.validate(token)
.then((token) => file.create(fileOption))
.then((file) => setup ? file.getToken(userfromSetup) : Promise.resolve({}))
.then((token) => setup ? file.setup(setupOptions) : Promise.resolve({}))
.then((data) => moveOption ? file.getTokenForMove(userFromMove) : Promise.resolve({}))
.then((token) => moveOption ? file.move(moveOption) : Promise.resolve({}))
.then((success)=>logger.log(`file created successfully`))
.catch((err)=>logger.error(`Error`))
Если setupOption не определено, я не хочу получать токен для него и создавать настройки для файла и то же самое для moveOption. Для создания установки мне нужно сначала создать токен и то же самое для перемещения
Так что меня беспокоит то, как пропустить обещания и возвращать ненужные пустые обещания, если указанные выше переменные не определены
1 ответ
var file_promise = file.validate(token)
.then((token) => file.create(fileOption))
.then((file) => setup ? file.getToken(userfromSetup) : Promise.resolve({}))
.then((token) => setup ? file.setup(setupOptions) : Promise.resolve({}));
if(moveOption){
file_promise.then((data)=>{file.getTokenForMove(userFromMove)});
}
file_promise.then((token) => moveOption ? file.move(moveOption) : Promise.resolve({}))
.then((success)=>logger.log(`file created successfully`))
.catch((err)=>logger.error(`Error`));
Вы можете просто использовать переменную и регулярные условные операторы, чтобы связать, или нет, обещания.
Проблема, которая может возникнуть из-за этого, состоит в том, что каждый шаг не может быть уверен в том, что он получит, но ваш код создает параметры для функций, вызываемых в then(), но они не используют их, поэтому он не должен вызывать никаких проблем. Иначе, вы бы поступили точно так же, как вы делаете, и решили бы со значением по умолчанию или чем-то еще.