Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.10.2018, 11:00
Интересующийся
Отправить личное сообщение для victornalchik Посмотреть профиль Найти все сообщения от victornalchik
 
Регистрация: 18.11.2017
Сообщений: 21

Асинхронность callback с return и throw
Подскажите пожалуйста минусы использования callback (помимо основных лапша в коде), и почему мы не можем использовать return и throw с callbackами (помимо основной причины, что callback может быть асинхронным и возвращать значение уже после присваивания этого асинхронного значения какой либо переменной).
Ответить с цитированием
  #2 (permalink)  
Старый 23.10.2018, 11:20
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

На самом деле уже много придумано, как избавиться от 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
Ответить с цитированием
  #3 (permalink)  
Старый 23.10.2018, 11:25
Интересующийся
Отправить личное сообщение для victornalchik Посмотреть профиль Найти все сообщения от victornalchik
 
Регистрация: 18.11.2017
Сообщений: 21

Вопрос не об этом)
Ответить с цитированием
  #4 (permalink)  
Старый 23.10.2018, 11:49
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

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

Сообщение от victornalchik
возвращать значение
Куда возвращать?
Ответить с цитированием
  #5 (permalink)  
Старый 23.10.2018, 13:06
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

Вопрос как раз об этом )
Ответить с цитированием
  #6 (permalink)  
Старый 23.10.2018, 13:43
Интересующийся
Отправить личное сообщение для victornalchik Посмотреть профиль Найти все сообщения от victornalchik
 
Регистрация: 18.11.2017
Сообщений: 21

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

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

Можете привести пожалуйста пример с третьим вариантом(про throw и return), не могу его понять.
Ответить с цитированием
  #7 (permalink)  
Старый 23.10.2018, 13:58
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

проблемы высосаны из пальца, а это обычно происходит если на 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
Ответить с цитированием
  #8 (permalink)  
Старый 23.10.2018, 14:08
Интересующийся
Отправить личное сообщение для victornalchik Посмотреть профиль Найти все сообщения от victornalchik
 
Регистрация: 18.11.2017
Сообщений: 21

У вас в коде some возвращается в консоле, в итоге причина все равно не ясна, в каком коде нельзя применить return, throw)
Ответить с цитированием
  #9 (permalink)  
Старый 23.10.2018, 14:27
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

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


что хочешь то?)))
Ответить с цитированием
  #10 (permalink)  
Старый 25.10.2018, 07:48
Интересующийся
Отправить личное сообщение для victornalchik Посмотреть профиль Найти все сообщения от victornalchik
 
Регистрация: 18.11.2017
Сообщений: 21

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

Последний раз редактировалось victornalchik, 25.10.2018 в 07:51.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мобильная версия сайта переходит в ПК версию сайта. Luara Элементы интерфейса 0 25.04.2017 10:00
Работа с textarea Rompo Events/DOM/Window 14 16.12.2013 17:41
Как найти различие между двумя массивами? Maxmaxmaximus4 Оффтопик 169 10.12.2013 16:43
Jin: И снова о наследовании tenshi Ваши сайты и скрипты 16 19.08.2013 20:30
Нативный шаблонизатор Антон Крамолов AJAX и COMET 191 28.12.2012 17:47