На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное 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 -
      сам все порешал :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 -
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0298 ]   [ 15 queries used ]   [ Generated: 29.03.24, 00:27 GMT ]