Асинхронность callback с return и throw
Подскажите пожалуйста минусы использования callback (помимо основных лапша в коде), и почему мы не можем использовать return и throw с callbackами (помимо основной причины, что callback может быть асинхронным и возвращать значение уже после присваивания этого асинхронного значения какой либо переменной).
|
На самом деле уже много придумано, как избавиться от callback
https://rxjs-dev.firebaseapp.com/ https://github.com/stoeffel/awesome-fp-js http://2ality.com/2016/10/asynchronous-iteration.html https://codeburst.io/functional-prog...t-e57e7e28c0e5 |
Вопрос не об этом)
|
Цитата:
Цитата:
|
Вопрос как раз об этом )
|
https://tproger.ru/translations/asyn...us-javascript/
В этой статье есть вот такая вот запись: Проблемы с коллбэками: - легко написать «callback hell» или спагетти-код, если не использовать их должным образом; - легко упустить обработку ошибок; - нельзя возвращать значения с выражением return, как и нельзя использовать ключевое слово throw. Можете привести пожалуйста пример с третьим вариантом(про throw и return), не могу его понять. |
проблемы высосаны из пальца, а это обычно происходит если на javascript программировать как на java )
// return
const foo = (function () {
return {
abc(callback) {
var result = 'some'
return callback(result)
}
}
})()
console.log(foo.abc(function (datResult) {
return datResult
})) // some
// throw
const tthrow = new Promise(function (resolve, reject) {
reject('act like throw')
}).then(function (message) {
console.log('pure', message)
}).catch(function (error) {
console.log('error', error)
}) // error act like throw
|
У вас в коде some возвращается в консоле, в итоге причина все равно не ясна, в каком коде нельзя применить return, throw)
|
let tthrow = new Promise(function (resolve, reject) {
try {
throw new Error('error via throw')
} catch (error) {
reject(error)
}
}).then(function () {
}).catch(function (error) {
console.log('error', typeof error, error)
})
что хочешь то?))) |
Там описываются недостатки callback, а не достоинства promise)
|
| Часовой пояс GMT +3, время: 05:19. |