Compartilhar via


Definindo os valores de tempo limite com WinJS.xhr ou HttpClient (HTML)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente]

Quando você usa XMLHttpRequest, pode definir valores de tempo limite diretamente, mas o mesmo não pode ser feito com o uso de Windows.Web.Http.HttpClient ou WinJS.xhr. Porém, existe uma maneira de definir tempos limite em objetos WinJS.Promise. Ao chamar WinJS.Promise.timeout, você garante que a solicitação será cancelada se não for concluída dentro do tempo especificado.

No código do projeto XhrExample criado em Guia de início rápido: baixando um arquivo com WinJS.xhr, encapsule a função WinJS.xhr em uma chamada para WinJS.Promise.timeout.

Note que, ao usar WinJS.Promise.timeout dessa maneira, você precisa usar then, que retorna um Promise em caso de erro, em vez de usar done, que não gera o mesmo resultado.

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";
    }));

Quando você executa esse código, a solicitação da Web deve ser concluída sem erros e você deve ver o DIV ficar verde. Para ver o que acontece quando a solicitação é cancelada, reduza o tempo limite para 200 milissegundos:

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";
        }));

Nesse caso, a solicitação da Web deve ser cancelada. O DIV deve ficar vermelho e você vê a mensagem "Ocorreu um erro: cancelado".

Usando o código do projeto XhrExample, também podemos mostrar como definir um tempo limite ao usar 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";
        }));

Tópicos relacionados

Outros recursos

Conectando-se a serviços Web

Como baixar um arquivo com WinJS.xhr

Como carregar dados binários com WinJS.xhr

Referência

Windows.Foundation.Uri

Windows.Web.Http

Windows.Web.Http.HttpClient

WinJS.xhr

XMLHttpRequest

Aprimoramentos do XMLHttpRequest

Exemplos

Exemplo de HttpClient

Exemplo de integração de conteúdo e controles a partir dos serviços Web

Usando um Blob para salvar e carregar exemplo de conteúdo

Exemplo de autenticação da Web

XHR, manipulando erros de navegação e exemplo de esquemas URL