Поделиться через


Настройка значений времени ожидания с помощью WinJS.xhr или HttpClient (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

При использовании объекта XMLHttpRequest можно задать значения времени ожидания напрямую, что невозможно при использовании Windows.Web.Http.HttpClient или WinJS.xhr. Тем не менее есть способ настройки времени ожидания в объектах WinJS.Promise. Вызов метода WinJS.Promise.timeout гарантирует, что запрос, не завершенный в течение указанного времени, будет отменен.

В коде из проекта XhrExample, созданного в разделе Скачивание файла с помощью WinJS.xhr, заключите функцию WinJS.xhr в вызов WinJS.Promise.timeout.

Обратите внимание, что при таком способе использования WinJS.Promise.timeout вам необходимо применить метод then, который возвращает объект Promise в случае ошибки в отличие от метода done.

var xhrDiv = document.getElementById("xhrReport");

WinJS.Promise.timeout(1500, WinJS.xhr({ url: "https://www.microsoft.com" })
    .then(function complete(result) {
        xhrDiv.innerText = "Downloaded the page";
        xhrDiv.style.backgroundColor = "#00FF00";
        },
        function error(error){
            // The error thrown when xhr is canceled has a message property, not a statusText property.
            if (error.statusText)
                xhrDiv.innerHTML = "Got error: " + error.statusText;
            else
                xhrDiv.innerHTML = "Got error: " + error.message;
            xhrDiv.style.color = "#000000";
            xhrDiv.style.backgroundColor = "#FF0000";
        },
        function progress(result) {
            xhrDiv.innerText = "Ready state is " + result.readyState;
            xhrDiv.style.color = "#000000";
            xhrDiv.style.backgroundColor = "#0000FF";
    }));

При выполнении этого кода веб-запрос должен завершиться без ошибок и цвет элемента DIV должен стать зеленым. Чтобы узнать, что произойдет при отмене запроса, сократим период времени ожидания до 200 мс:

var xhrDiv = document.getElementById("xhrReport");

WinJS.Promise.timeout(200, WinJS.xhr({ url: "https://www.microsoft.com" })
    .then(function complete(result) {
        xhrDiv.innerText = "Downloaded the page";
        xhrDiv.style.backgroundColor = "#00FF00";
        },
        function error(error){
            // The error thrown when xhr is canceled has a message property, not a statusText property.
            if (error.statusText)
                xhrDiv.innerHTML = "Got error: " + error.statusText;
            else
                xhrDiv.innerHTML = "Got error: " + error.message;
            xhrDiv.style.color = "#000000";
            xhrDiv.style.backgroundColor = "#FF0000";
        }));

В этом случае веб-запрос должен быть отменен. Цвет элемента DIV станет красным, и появится сообщение "Получена ошибка. Отменено".

При помощи кода из проекта XhrExample можно также показать, как задать значение времени ожидания при использовании Windows.Web.Http.HttpClient.

var xhrDiv = document.getElementById("xhrReport");

var hc = new Windows.Web.Http.HttpClient();
var uri = new Windows.Foundation.Uri("https://www.microsoft.com");
WinJS.Promise.timeout(1500, hc.getAsync(uri)
    .then(function complete(result) {
        xhrDiv.innerText = "Downloaded the page:";
        xhrDiv.style.backgroundColor = "#009900"; // Set to dark green.
        result.content.readAsStringAsync().then(function complete(str) {
            xhrDiv.innerText += "Content:" + str;
            xhrDiv.style.backgroundColor = "#00FF00"; // Set to light green.
        })
    },
        function error(error) {
            // The error thrown when xhr is canceled has a message property, not a statusText property.
            if (error.statusText)
                xhrDiv.innerHTML = "Got error: " + error.statusText;
            else
                xhrDiv.innerHTML = "Got error: " + error.message;
            xhrDiv.style.color = "#000000";
            xhrDiv.style.backgroundColor = "#FF0000";
        },
        function progress(result) {
            xhrDiv.innerText = "Ready state is " + result.readyState;
            xhrDiv.style.color = "#000000";
            xhrDiv.style.backgroundColor = "#0000FF";
        }));

Связанные разделы

Другие ресурсы

Подключение к веб-службам

Скачивание файла с помощью WinJS.xhr

Выкладывание двоичных данных с помощью WinJS.xhr

Ссылки

Windows.Foundation.Uri

Windows.Web.Http

Windows.Web.Http.HttpClient

WinJS.xhr

XMLHttpRequest

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

Примеры

Пример HTTP-клиента

Пример интеграции содержимого и элементов управления из веб-служб

Использование большого двоичного объекта для сохранения и загрузки примера содержимого

Пример веб-проверки подлинности

Пример XHR, обработки ошибок навигации и схем URL-адресов