Egret设置HttpRequest请求(即接口调用)超时时间

背景

用Egret开发的H5项目,调用第三方图片处理接口,由于图片大小和用户网络问题,接口返回时间有可能较长,影响用户体验,故需设置接口超时时间。

引擎中并没有类似于Ajax中的timeout参数,所以需要自己实现。

 

分析

实现原理是,设置一个计时器Timer模拟超时时间,超过指定时间后立刻中止请求。

 

代码示例

let portState = false; // 接口返回状态

let request = new egret.HttpRequest();
request.responseType = egret.HttpResponseType.TEXT;
request.open("https://...", egret.HttpMethod.POST);
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.send(params);
request.addEventListener(egret.Event.COMPLETE, function(event: egret.Event){
    let request = event.currentTarget;
    let response = eval('(' + request.response + ')');

    portState = true; // 接口返回状态为true
}, this);

// 设置超时时间10s
let timer: egret.Timer = new egret.Timer(10000, 1);
timer.addEventListener(egret.TimerEvent.TIMER_COMPLETE, function(){
    if(!portState){ // 超过指定时间,接口返回状态仍为false,则中止请求
        request.abort();

        // todo: 在这里添加接口调用失败的逻辑
    }
}, this);
timer.start();

 

参考链接

Egret文档发送HTTP请求:http://developer.egret.com/cn/github/egret-docs/Engine2D/net/sendHTTP/index.html

Egret API HttpRequest:http://developer.egret.com/cn/apidoc/index/name/egret.HttpRequest#abort

httprequest和urlloader无法设置超时:https://bbs.egret.com/forum.php?mod=viewthread&tid=19894

egret HttpRequest如何设置请求超时时间:https://bbs.egret.com/forum.php?mod=viewthread&tid=47652

你可能感兴趣的:(Egret)