Page 82 - jQuery для начинающих
P. 82

80% Объект Deferred и побратимы



             Работа  с  Deferred  это  уже  высший  пилотаж,  это  «mad  skills»  заставлять  асинхронный
             JavaScript  работать  синхронно.  Давайте  посмотрим  как  он  работает  (данный  код  можно

             скопировать в консоль и выполнить на любой странице, где подключен jQuery):


                    // инициализация Deferred объекта
                    // статус «ожидает выполнение»
                    var D = $.Deferred();

                    // подключаем обработчики
                    D.done(function() { console.log("first") });
                    D.done(function() { console.log("second") });

                    // изменяем статус на «выполнен успешно»
                    // для этого вызываем resolve()
                    // наши обработчики будут вызваны в порядке очереди,
                    // но они не ждут друг-друга
                    D.resolve();

                    // данный обработчик подключён слишком поздно, и будет вызван сразу
                    D.done(function() { console.log("third") });


             Кроме сценариев с «happy end», есть ещё и грустные истории, когда всё пошло не так как
             нам бы хотелось:



                    // инициализация Deferred объекта
                    var D = $.Deferred();
                    // подключаем обработчики
                    D.done(function() { console.log("done") });

                    D.fail(function() { console.log("fail") });
                    // изменяем статус на «выполнен с ошибкой»
                    D.reject();

                    // в консоли нас будет ожидать лишь «fail» :(


             Для ускорения написания кода существует ещё метод  then(), который позволяет вешать
             одновременно обработчики всех типов:


                    D.then(function() { console.log("done") },
                            function() { console.log("fail") });




                                                                                                         82


                                                                                        www.trk.kg
   77   78   79   80   81   82   83   84   85   86   87