Что является хорошим способом справиться с отказом от критически важных обещаний? - PullRequest
0 голосов
/ 26 апреля 2020

В приложении, которое я создаю, часто бывают отказы от обещаний, которые не имеют решающего значения. Поэтому я хочу продолжить с последующим кодом в блоке finally . Я обнаружил, что переменные в блоке затем и catch доступны в блоке finally без необходимости делать их глобальными. Было бы разумно использовать эти переменные в блоке finally или это не элегантно?

function promiseFunction1(input) {
    return new Promise((resolve, reject) => {

        if (input === 1) resolve("resolution from promiseFunction1")
        if (input === 2) reject("rejection from promiseFunction1")

    })
}


var maininput =1 
promiseFunction1(maininput)
.then((result)=>{
    //ideal outcome
    resultCapturedInThen = result
})
.catch((error)=>{
    console.log(`Warning: soemthing bad happened, but let's carry on`)
    resultCapturedInThen = null
})
.finally(()=>{
    if (resultCapturedInThen)
    { 
        console.log(`result of promiseFunction1 in finally is ${resultCapturedInThen}`)
    }

})

CONSOLE OUTPUT
____________________________________________________________
results
**if maininput is equal to 1**
result of promiseFunction1 in finally is resolution from promiseFunction1
**if maininput is equal to 2**
Warning: soemthing bad happened, but let's carry on

1 Ответ

1 голос
/ 05 мая 2020

Я хочу использовать resultCapturedInThen для дальнейшей обработки (в случае успеха). Если нет (если поймать), я могу продолжить обработку без него. Теперь, это сделало бы дублирующий код в Then and Catch, поэтому я использую наконец.

Нет необходимости использовать finally для этого. Вы можете воспользоваться цепочкой обещаний:

var maininput = 1 
promiseFunction1(maininput).catch(error=>{
    console.log(`Warning: something bad happened (%v), but let's carry on`, error)
    return null
//  ^^^^^^^^^^^
})
.then(result => {
    console.log(`result of promiseFunction1 is ${result}`)
    if (result !== null) {
        console.log('Looks like success')
    }
})

Обратный вызов then получает значение выполнения promiseFunction1 или возвращаемое значение обратного вызова обработчика catch, если promiseFunction1 отклоняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...