Ответы пользователя по тегу Асинхронное программирование
  • Как получить результат работы асинхронной функции в Javascript?

    max7
    @max7
    max7
    А старый дедовский способ

    var mySomeItems = null;
    getSomeItems(
      function( someItems ) { 
        mySomeItems = someItems;
      }
    );

    и где-то
    if(mySomeItems)
    {
       ...
    }


    У меня, например, вот так используется "event emitter”:
    1. если нельзя изменить функцию getSomeItems
    var myME = new ManagerEvents(...); // <-- где-то
    
    myME.on("NewSomeItems", function(event)
    {
       var someItems = event.data;
       ...
    });
    
    getSomeItems(
      (function( someItems ) 
      { 
        this.emit("NewSomeItems", someItems);
      }).bind(myME)
    );

    2. если можно изменить функцию getSomeItems
    var myME = new ManagerEvents(...); // <-- где-то
    
    myME.on("NewSomeItems", function(event)
    {
       var someItems = event.data;
       ...
    });
    
    getSomeItems(myME); // просто принимает аргументом ManagerEvents и внутри генерирует событие.

    Потом я в свой ManagerEvents добавил функцию (примерно)
    ManagerEvents.prototype.delegate = function(name)
    {
       var me = this;
       return function()
       {
          return me.emit(name, arguments);
       };
    };

    и в итоге получается
    var myME = new ManagerEvents(...); // <-- где-то
    
    myME.on("NewSomeItems", function(event)
    {
       var someItems = event.data[0];
       ...
    });
    
    getSomeItems(myME.delegate("NewSomeItems"));
    Ответ написан
    1 комментарий