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

Applies to Windows and Windows Phone

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: "http://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: "http://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("http://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

 

 

Mostrar:
© 2014 Microsoft