Условное обещание в JS

Я пытаюсь уменьшить потребность в нескольких функциях, тем более что у многих есть promise, который делает то же самое. Однако я хочу добавить условие, основанное на props от родителя.

Например, у меня есть функция

example
  .doSomething()
  .then(something => {
    example.createSomething(something)
  });

Но как я могу добавить условие, которое изменяет .doSomething() с props из somethingElse на .doSomethingElse()?

Следовательно, если somethingElse === true функция будет

example
  .doSomethingElse()
  .then(something => {
    example.createSomething(something)
  });

так почему бы и нет if (somethingElse) example.doSomethingElse...) else example.doSomething?

dwjohnston 03.06.2019 02:09

OP хочет разветвить условие, но результат в конечном итоге сходится

Valen 03.06.2019 02:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
302
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я пишу это в свой телефон, не обессудьте, может быть, приберусь позже.

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 для меня?)

Valen 03.06.2019 02:17

Предполагая, что и doSomething(), и doSomethingElse() возвращают обещание, нет абсолютно никакой необходимости заключать их в другое с помощью Promise.resolve(). Вы можете использовать свой второй пример без Promise.resolve() с тем же эффектом.

Phil 03.06.2019 02:51
Promise.resolve был секрет здесь. У меня есть много функций, возвращающих одно и то же обещание, и вместо этого я сортирую свои условные возвраты, используя let examples, а затем назначая каждую как if (somethingElse) { examples = 'doSomethingElse' }. Затем, используя Promise.resolve, я последовал второму примеру выше как (example[examples]()).then. Отличная помощь, спасибо.
Darren 03.06.2019 03:27

@Phil Вы правы, на всякий случай doSomething() верните простой thenable объект вместо Promise

Valen 03.06.2019 13:11

Вы можете использовать метод 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');
})

Другие вопросы по теме