imobile_for_reactnative
Version:
iMobile for ReactNative,是SuperMap iMobile推出的一款基于React-Native框架的移动应用开发工具。基于该开发工具,用户可以使用JavaScript开发语言,开发出在Android和IOS操作系统下运行的原生移动GIS应用,入门门槛低,一次开发,处处运行。
45 lines (38 loc) • 1.09 kB
text/typescript
import { HttpRequest, HttpRequestParam, HttpResponse, HttpRequestFailed } from './HttpRequest'
/** node 原生fetch封装的网络请求接口*/
export class Fetch implements HttpRequest {
request = async (param: HttpRequestParam): Promise<HttpResponse | HttpRequestFailed> => {
const fetchPromise = fetch(param.url, {
method: param.method,
headers: param.headers,
body: param.body,
})
try {
const response = await Promise.race([fetchPromise, timeout(40)])
if(response === 'timeout') {
return { error: 'timeout' }
}
const pJson = response.json()
const pText = response.clone().text()
return {
headers: response.headers,
status: response.status,
json: () => pJson,
text: () => pText,
}
} catch (e) {
return { error: 'error'}
}
}
}
/**
* 超时返回‘timeout’
* @param sec 超时秒数
*/
function timeout(sec: number): Promise<'timeout'> {
return new Promise(resolve => {
setTimeout(() => {
resolve('timeout')
}, 1000 * sec)
})
}