Использование объектов Deferred, возвращаемых функциями XHR

После запуска CherryPy и сохранения следующего ниже кода разметки в файле с именем foo.html в том же каталоге, где находится файл hello.py, все будет готово к испытаниям. Перейдите в броузере по адресу http://127.0.0.1:8080/foo.html, и страница foo.html должна загрузиться без какихлибо проблем:
<html>
<head>
<title>Fun with Deferreds!</title>
<script type="text/javascript"
src="http://o.aolcdn.com/dojo/1.1/dojo/dojo.xd.js">
</script>
<script type="text/javascript">
dojo.addOnLoad(function() {
//Вызвать функцию, запускающую асинхронный запрос,
//которая вернет объект Deferred
var d = dojo.xhrGet({
url: "http://localhost:8080",
timeout : 5000,
load : function(response, ioArgs) {
console.log("Load response is:", response);
console.log("Executing the callback chain now...");
return response;
},
error : function(response, ioArgs) {
console.log("Error!", response);
console.log("Executing the errback chain now...");
return response;
}
});
console.log("xhrGet fired. Waiting on callbacks or errbacks");
//Добавить несколько функций обратного вызова
d.addCallback(
function(result) {
console.log("Callback 1 says that the result is ",
result);
return result;
}
);
d.addCallback(
function (result) {
console.log("Callback 2 says that the result is ",
result);
return result;
}
);
//Добавить несколько обработчиков ошибок
d.addErrback(
function(result) {
console.log("Errback 1 says that the result is ",
result);
return result;
}
);
d.addErrback(
function(result) {
console.log("Errback 2 says that the result is ",
result);
return result;
}
);
});
</script>
</head>
(body)
Check the Firebug console.
(/body)
</html>


После запуска этого примера вы должны увидеть в консоли Firebug следующий вывод:
xhrGet fired. Waiting on callbacks or errbacks
Load response is: Hello
Executing the callback chain now...
Callback 1 says that the result is Hello
Callback 2 says that the result is Hello

Главный вывод, который следует из этого примера, заключается в том, что объект Deferred дает ясный, непротиворечивый интерфейс, позволяющий обрабатывать все ситуации, складывающиеся в результате работы функции xhrGet, – будь то успешное получение ответа на запросили ошибка, которую надо обработать.

Вы можете попробовать изменить значение предельного времени ожидания в вызове функции dojo.xhrGet так, чтобы это время оказалось меньше трех секунд, необходимых серверу для передачи ответа. В результате это приведет к появлению ошибки, и вы сможете увидеть, как запускается цепочка функций обработки ошибок. Эта цепочка запускается еще и тогда, когда чтото пошло не так как надо в одной из функций обратного вызова, поэтому вы можете попробовать внести в функцию обратного вызова программный код, генерирующий ошибку, чтобы увидеть, что перед вызовом цепочки функций обработки ошибок успевает отработать часть цепочки функций обратного вызова.
Теги:
AJAX
Добавлено: 24 Июля 2018 20:44:40 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...