Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   promises. почему так запилено? (https://javascript.ru/forum/misc/57560-promises-pochemu-tak-zapileno.html)

javaQest 09.08.2015 14:17

promises. почему так запилено?
 
Че-то я думаю-думаю, и не могу понять, почему в JS (после стольких лет ожиданий и надежд от избавления от callback-hell), запилили настольок уродливую парашу? Ведь, по идее, JS -- это ООП язык, а в Ъ асинхронные сообщения запиливаются по другому.

Суть в том, что, чтобы наше дерьмо возвратило обещание, нам надо предварительно это подготовить с помощью new Promise, тогда как в нормальных ООП-языках, мы имеем возможность асинхронно отправить сообщение независимо от его реализации.

Почему так сделали? Причина в каких то ограничениях языка? Или просто дезигнеры че-то попутали?

Aetae 09.08.2015 15:07

Хз, порой кажется, что увидали они callback-hell, ужаснулись и зафигачили первое, что пришло в голову. Symbol тоже мне кажется тотальным overmind'ом.
Но там вроде теоретически предположительно наверное скорее всего должны сидеть умные ребята, может это мы просто тупые чего-то недопонимаем?

Erolast 09.08.2015 15:09

Обещания - это не финальное решение для обеспечения удобной работы с асинхронщиной, а лишь шаг на пути к нему. Сейчас идет разработка фичи async functions, которая обеспечит асинхронную работу без увеличения стека, с нормальным синтаксисом и перехватом ошибок.

Выглядит так:
async function loadUser(id) {
  let user;
  
  try {
    let response = await fetch(`/api/users/${id}`);
    user = response.body;
  } catch (error) {
    console.error(error);
  }

  return user;
}

Новейший текст спецификации - http://tc39.github.io/ecmascript-asyncawait/.

Это то?

Aetae 09.08.2015 15:19

Erolast, да знаем про async - нормальное решение. Знаем и почему промисы - обратная совместимость. И всё же и всё же...

javaQest 09.08.2015 15:36

Цитата:

Сообщение от Erolast
Это то?

Не знаю, надо осилить сначала документ. Я вот парралельно пишу на Io (это который язык, не js-фреймверк), там все вообще элементарно делается, типа
someMethod := casualMethod(some code returns some value)
casualVar := someMethod
aFuture := @someMethod

aFuture println
casualVar ptintln
1 println

// выхлоп будет

>>some value
>>1
>>some value // -- из фьючера

подозреваю, что это не совсем то. Во всяком случае, async/await -- точно не то

Erolast 09.08.2015 15:44

Цитата:

Не знаю, надо осилить сначала документ.
Вот в помощь: http://pouchdb.com/2015/03/05/taming...-with-es7.html

javaQest 09.08.2015 15:50

Erolast,
Спасибо, не могу плюсануть в карму, форум, наверное глючит, пишет должны добавить кому то еще, я добавил Aetae, он один х*й, не дает. разлогинивание тоже не помогло, а плюсовал я тебе, ЕМНИП, вчера, так что извиняй:)

UPD А не, добавилось вроде, че то я запутался, может не я плюсанул, ну ладно, х с ним.

Safort 09.08.2015 16:02

Цитата:

Сообщение от javaQest (Сообщение 383414)
Erolast,
Спасибо, не могу плюсануть в карму, форум, наверное глючит, пишет должны добавить кому то еще, я добавил Aetae, он один х*й, не дает. разлогинивание тоже не помогло, а плюсовал я тебе, ЕМНИП, вчера, так что извиняй:)

UPD А не, добавилось вроде, че то я запутался, может не я плюсанул, ну ладно, х с ним.

Повторно можно поставить плюс только после того, как несколько раз другим изменишь карму.
//Плюсанул я, но это всё не важно)

javaQest 09.08.2015 16:05

Safort,
Детсад какой-то. 2 раза не прокатило, поэтому, попытки прекращаю, как то смешно получается, можно покраснеть от этого нелепого конфуза:)

Erolast 09.08.2015 16:31

Да, система кармы тут, по меньшей мере, странная - ни для выражения благодарности, ни для саморегуляции не годится) Запилили бы хотя бы обычные лайки с указанием числа у каждого поста - я считаю, куда лучше б было.


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