Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Асинхронность callback с return и throw (https://javascript.ru/forum/dom-window/75595-asinkhronnost-callback-s-return-i-throw.html)

victornalchik 23.10.2018 11:00

Асинхронность callback с return и throw
 
Подскажите пожалуйста минусы использования callback (помимо основных лапша в коде), и почему мы не можем использовать return и throw с callbackами (помимо основной причины, что callback может быть асинхронным и возвращать значение уже после присваивания этого асинхронного значения какой либо переменной).

SuperZen 23.10.2018 11:20

На самом деле уже много придумано, как избавиться от 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

victornalchik 23.10.2018 11:25

Вопрос не об этом)

Dilettante_Pro 23.10.2018 11:49

Цитата:

Сообщение от victornalchik
минусы использования callback (помимо основных лапша в коде),

callback сам по себе никакой лапши в коде не создает...

Цитата:

Сообщение от victornalchik
возвращать значение

Куда возвращать?

SuperZen 23.10.2018 13:06

Вопрос как раз об этом )

victornalchik 23.10.2018 13:43

https://tproger.ru/translations/asyn...us-javascript/
В этой статье есть вот такая вот запись:
Проблемы с коллбэками:

- легко написать «callback hell» или спагетти-код, если не использовать их должным образом;
- легко упустить обработку ошибок;
- нельзя возвращать значения с выражением return, как и нельзя использовать ключевое слово throw.

Можете привести пожалуйста пример с третьим вариантом(про throw и return), не могу его понять.

SuperZen 23.10.2018 13:58

проблемы высосаны из пальца, а это обычно происходит если на 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

victornalchik 23.10.2018 14:08

У вас в коде some возвращается в консоле, в итоге причина все равно не ясна, в каком коде нельзя применить return, throw)

SuperZen 23.10.2018 14:27

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)
})


что хочешь то?)))

victornalchik 25.10.2018 07:48

Там описываются недостатки callback, а не достоинства promise)


Часовой пояс GMT +3, время: 20:27.