Асинхронность 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, время: 20:27. |