На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: ElcnU, ANDLL, fatalist
  
> Promise, пытаюсь понять как он работает
    Ку :D
    изучаю промисы, пытаюсь упрощено написать его, я бы сказал очень упрощено :D
    ExpandedWrap disabled
      const MyPromise = (() => {
          const _then = Symbol();
          
          return class MyPromise {
              constructor(func) {
                  func();
              }
       
              then(func) {  
                  this[_then] = func;
              }
          };
      })();
       
      // test
      const promise = new MyPromise(resolve => {  
          setTimeout(() => resolve("Ready!"), 2000); //<-- асинхронный вызов resolve
      });
       
      promise.then(message => console.log(message));

    запускаю в консоле хрома выскакивает эксэпшен с указанием что resolve не функция:
    Uncaught TypeError: resolve is not a function
    at <anonymous>:19:4

    Где подвох? Как вообще организовать такую схему как в промесах, там конечно много еще чего понаписано, меня все не интересует!
    Меня интересует как вызвать функцию resolve, которую передают позже по коду в then :wacko:
    Сообщение отредактировано: Cfon -
    Зовите меня Гена! Просто Гений! :lool:
    ---------------------------------------
    "Записки гения JavaScript" => https://github.com/Cfon/ImGeniusJavaScript
    "Программирование БД в действии: подход имбицила" => https://github.com/Cfon/MFCSQLite3Demo
      сам все порешал :D
      надо просто было передать функцию в func, а я про это вапще забыл :lool:
      ExpandedWrap disabled
        const MyPromise = (() => {
            const _then = Symbol();
            
            return class MyPromise {
                constructor(func) {
                    func((arg) => this[_then](arg); }); //<-- передаю функцию, в которой вызываю функцию, переданную в метод then!
                }
         
                then(func) {  
                    this[_then] = func;
                }
            };
        })();
         
        // test
        const promise = new MyPromise(resolve => {  
            setTimeout(() => resolve("Ready!"), 2000);
        });
         
        promise.then(message => console.log(message));
         
        // Ready!

      гениально не так ли? :blush:
      Сообщение отредактировано: Cfon -
      Зовите меня Гена! Просто Гений! :lool:
      ---------------------------------------
      "Записки гения JavaScript" => https://github.com/Cfon/ImGeniusJavaScript
      "Программирование БД в действии: подход имбицила" => https://github.com/Cfon/MFCSQLite3Demo
      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script Execution time: 0,0691 ]   [ 14 queries used ]   [ Generated: 19.10.17, 14:35 GMT ]