Как получить второе `затем` параметр обратного вызова с асинхронным / ждать?

голоса
1

Например

randomLibPromise.then((data, err) => { // do something with err })

как бы я перевожу , что с ЖДУТ? Это обещание приходит из библиотеки , так что я не иметь контроль над тем , что ошибка проходит thenвместо catch. Что у меня есть:

let data = await randomLibPromise.catch(err)

но я не получаю, что второй параметр, и я не могу получить эту ошибку.

Каждый пример , я нахожу на Google говорить об catchобработке ошибок , но не then.

Задан 19/09/2018 в 13:22
источник пользователем
На других языках...                            


1 ответов

голоса
3

Для того, чтобы «исправить» странное обещание, вы могли бы просто , throw errесли есть один, а в returnпротивном случае данные:

var fixed = randomLibPromise.then((data, err) => { 
    if(err) throw err;
    return data;
})

Результат будет обещанием , которое делает правильную вещь, то есть передает данные к then, ошибка к catchили, если в ожидании, либо возвращается dataили бросает ошибку.

fixed.then(data => { /* handle data */ }).catch(err => { /* handle err */ });
// or
try {
    var data = await fixed;
    // handle data
} catch(err) {
    //handle err
}
Ответил 19/09/2018 d 13:26
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more