Взаимодействие веб -страниц становится все более и более сложным, и JavaScript также становится все более и более асинхронным операциями. Например, общий запрос AJAX требует ответа на операции при выполнении запроса. Запрос обычно асинхронно. В процессе запроса пользователь может выполнять другие операции, не блокируя страницу. Этот асинхронный эффект взаимодействия довольно дружелюбен для пользователя. Но для разработчиков очень недружелюбно справляться с такой операцией в больших количествах. Операции, завершенные асинхронными запросами, должны быть предопределены в функции обратного вызова, и эта функция должна быть вызвана после завершения запроса. Этот нелинейный метод асинхронного программирования сделает разработчиков неудобными, а также принесет много неудобств, увеличивая связь и сложность кода, и организация Кодекса будет очень неэлегантной, значительно снижая обслуживание кода. Ситуация сложнее. Если операция должна ждать, пока не будут выполнены несколько асинхронных запросов AJAX, прежде чем ее можно будет выполнить, функция обратного вызова будет вложена. Если несколько слоев нужно быть вложенным, вы можете попросить только благословения.
Давайте посмотрим на следующие общие асинхронные функции.
Кода -копия выглядит следующим образом:
var showmsg = function () {
settimeout (function () {
оповещение («Привет»);
}, 5000);
};
Обычно это делается, если вы хотите добавить обратный вызов к функции.
Кода -копия выглядит следующим образом:
var showmsg = function (обратный вызов) {
settimeout (function () {
оповещение («Привет»);
// Добавить обратный вызов здесь
перезвонить();
}, 5000);
};
Если вы используете обещание easy.js, метод добавления обратных вызовов будет гораздо более элегантным, если вам нужно инкапсулировать исходную функцию в экземпляр обещания.
Кода -копия выглядит следующим образом:
var showmsg = function () {
// построить экземпляр обещания
var promise = new e.promise ();
settimeout (function () {
оповещение («Привет»);
// изменить состояние обещания
обещание
}, 5000);
// Вернуться к экземпляру обещания
вернуть обещание;
};
Есть 3 ключевых шага для инкапсулирования обычной функции в экземпляр обещания. Первым шагом является построение экземпляра обещания внутри функции. Второй шаг состоит в том, чтобы изменить состояние обещания, которое будет выполнено после выполнения функции развертывания. Третий шаг - вернуть этот экземпляр обещания. Каждый экземпляр обещания имеет 3 состояния, а именно в ожидании (не завершено), разрешено (завершено, успешно) и отвергнуто (отвергнуто, не удалось). Давайте посмотрим, как добавить обратные вызовы.
Кода -копия выглядит следующим образом:
showmsg (). Тогда (function (str) {
// обратный вызов добавлен здесь
обратный вызов (str);
});
Это полностью отделяет функцию обратного вызова от исходной асинхронной функции, и с точки зрения организации кода она гораздо более элегантно. Resolve принимает параметр, который может легко передавать данные в обратный вызов, добавленный с использованием метода Then.
Для запросов Ajax easy.js непосредственно инкапсулирует метод Ajax в объект перспективы, и вы можете напрямую добавить тогдашний метод для вызовов.
Кода -копия выглядит следующим образом:
E.ajax ({
URL: 'test1.php',
Тип: 'Get'
})
.then (function () {
// Добавить обратный вызов с успешным запросом
}, function () {
// Добавить обратный вызов, который неудачный запрос
});
Тогда метод принимает 2 функции в виде параметров. Первая функция - это завершенный обратный вызов, а второй - неудачный обратный вызов.
Что, если есть несколько запросов AJAX, упомянутых выше? Тогда вы должны использовать метод, когда. Этот метод может принять несколько экземпляров обещания в качестве параметров.
Кода -копия выглядит следующим образом:
var requests = e.when (e.ajax ({
URL: 'test1.php',
Тип: 'Get'
}), E.ajax ({
URL: 'test2.php',
Тип: 'Get'
}));
requests.then (function (arg1, arg2) {
console.log ('успех:' + arg1 [0] + arg2 [0]);
}, функция (arg1, arg2) {
console.log ('сбой:' + arg1 + arg2);
});
Когда метод должен хранить несколько экземпляров обещания в массив и подождать, пока все экземпляры обещания массива не будут завершены перед выполнением завершенного обратного вызова. Как только экземпляр отклонен, отклоненный обратный вызов немедленно выполняется.
Схема обещания является одной из спецификаций CommonJS. Многие основные библиотеки JavaScript имеют соответствующие реализации, такие как jQuery и Dojo, которые отложены на реализацию этих функций. Здесь я все еще хочу жаловаться на отложено JQUERY. Откладывая свое внутреннее использование, это должен быть модуль с самой низкой скоростью использования пользователей, который имеет определенную связь с его более сложным методом использования.