Я пытаюсь уменьшить потребность в нескольких функциях, тем более что у многих есть promise, который делает то же самое. Однако я хочу добавить условие, основанное на props от родителя.
Например, у меня есть функция
example
.doSomething()
.then(something => {
example.createSomething(something)
});
Но как я могу добавить условие, которое изменяет .doSomething() с props из somethingElse на .doSomethingElse()?
Следовательно, если somethingElse === true функция будет
example
.doSomethingElse()
.then(something => {
example.createSomething(something)
});
OP хочет разветвить условие, но результат в конечном итоге сходится



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я пишу это в свой телефон, не обессудьте, может быть, приберусь позже.
Promise.resolve(somethingElse ? example.doSomethingElse() : example.doSomething())
.then(...
если вы думаете, что писать дважды example утомительно
Promise.resolve(example[somethingElse ? "doSomethingElse" : "doSomething"]())
.then(...
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
Автор: @Фил
если обе (все) функции возвращают Promise
можно просто сделать
example[somethingElse ? "doSomethingElse" : "doSomething"]().then(...
Обратите внимание, что это означает, что Promise.resolve выше может даже обрабатывать возвращаемое значение без обещания.
это не имеет ничего общего с реакцией, это просто функция vanilla js (кто-то включает ссылку MDN Promise для меня?)
Предполагая, что и doSomething(), и doSomethingElse() возвращают обещание, нет абсолютно никакой необходимости заключать их в другое с помощью Promise.resolve(). Вы можете использовать свой второй пример без Promise.resolve() с тем же эффектом.
Promise.resolve был секрет здесь. У меня есть много функций, возвращающих одно и то же обещание, и вместо этого я сортирую свои условные возвраты, используя let examples, а затем назначая каждую как if (somethingElse) { examples = 'doSomethingElse' }. Затем, используя Promise.resolve, я последовал второму примеру выше как (example[examples]()).then. Отличная помощь, спасибо.
@Phil Вы правы, на всякий случай doSomething() верните простой thenable объект вместо Promise
Вы можете использовать метод Promise.all
let cleaRoom = function(){
return new Promise(function(resolve, reject){
resolve('room is cleaed')
})
}
let removeGarbage = function(message){
return new Promise(function(resolve, reject){
resolve(message + ' garbage is removed')
})
}
let wonIcecream = function(message){
return new Promise(function(resolve, reject){
resolve(message + ' won the icecream');
})
}
Promise.all([cleaRoom(),removeGarbage(),wonIcecream()]).then(function(){
console.info('finished all');
})
так почему бы и нет
if (somethingElse) example.doSomethingElse...) else example.doSomething?