Как использовать отложенное с пользовательским событием

Я пишу плагин, который генерирует события activating и activated. Я хочу вызвать событие activated только тогда, когда все обработчики событий activating будут выполнены. Я знаю, что $.trigger() вызывает обработчики событий синхронно, но проблема в том, что в моем обработчике событий может быть асинхронный код:

Пример:

$("test").trigger("activating");
$("test").trigger("activated");


$("test").on("activating",function()
{
     $.post("/test",{data:"test"},function()
    {
            //dom modifications here
            ////////////////
            //Here I would like to notify that the event handler is finished, like maybe async.js
    }
});

У меня есть несколько подсказок о $.Deferred & Promises, но я не понимаю, как их реализовать для решения моей конкретной проблемы.

Может ли кто-нибудь здесь дать мне решение?

Спасибо


person user2799445    schedule 30.04.2014    source источник
comment
Слушатели событий не имеют возвращаемых значений. Они ничего не сигнализируют источнику события через событие (кроме preventDefault()).   -  person Bergi    schedule 30.04.2014
comment
Я думаю, что вы хотите переместить триггер activated в функцию успеха ajax. Таким образом, активированное событие будет запущено, когда ваш вызов ajax будет завершен.   -  person HashFail    schedule 30.04.2014
comment
Если у вас есть асинхронный код в обработчиках событий, вы не сможете решить эту проблему без участия этих обработчиков в решении. Если у них есть асинхронный код, им придется как минимум сделать что-то вроде регистрации обещания, которое укажет, когда они будут выполнены.   -  person jfriend00    schedule 30.04.2014
comment
Как ни странно, даже через час кто-то задал тот же вопрос: stackoverflow.com/questions/23392924/   -  person Bergi    schedule 30.04.2014
comment
Спасибо, я прочитал этот пост, и, похоже, он отвечает на мой вопрос. Я скоро проверю это, и если это произойдет, я сделаю репост и отмечу это как решение.   -  person user2799445    schedule 09.05.2014