# ASyncRequest 异步请求使用说明

## 导入使用 获取请求实例
```code[javascript]

import AsyncRequest from "niceloo-javascript-utils/packages/net/AsyncRequest"
import Response from "niceloo-javascript-utils/packages/net/AsyncRequest/Response"

export default new AsyncRequest({
    /**
     * 执行器
     */
    executor:function (api,params){
        return new Promise((resolve, reject) => {
            $.ajax({
                url: "http://coolaf.com/tool/ajaxgp",
                type: "POST",
                dataType: "json",
                data: formData,
                header:{
                    "Access-Control-Allow-Origin":"*"
                },
                processData: false,
                contentType: false,
                success: function (data) {
                    data=JSON.parse(data.data.response).data;
                    resolve(new Response().setSuccessData(data))
                },
                error(error){
                    resolve(new Response().setXhrError(error))
                }
            });

        })
    },
    /**访问接口失败默认处理
     * @param {Object} data 业务接口返回数据
     * @param {Object} msg    失败信息
     */
    defaultSystemFailCallBack: function (data, msg) {
        console.error(msg);
    },
    /**
     * 访问接口系统报错error默认处理
     * @param {Object} data 接口返回数据
     * @param {Object} msg 失败信息
     */
    defaultSystemErrorCallBack: function (data, msg='服务器异常！') {
        console.error(msg);
    },
    /**ajax访问失败回调
     * @param {Object} error ajax访问失败情况下的当前错误对象
     * @param {Object} reTry 重新发送请求回调 reTry();
     */
    defaultXhrErrorCallBack: function (error="", reTry) {
        console.error(error);
    }
})
```

## 一般使用方式
```code[javascript]
    AsyncRequest.callService({
        url: '/ta/applet/oauth/codeOauth',
        data: {
            wxaccountAppid: Config.appid_WX,
        },
    }).success(function (data) {
        console.log("访问成功，数据为：", data);
    }).complete(function () {
        console.log("请求完成");
    });
```

## 扩展Promise返回的使用方式
```code[javascript]
    /**
    * 发送请求
    * @param {Object} ops 请求体
    * @param {String} ops.url 网关api地址
    * @param {Object} ops.data 网关api请求参数
    * @return {Promise} 服务端响应成功的data
    */
    let data = await AsyncRequest.getPromiseData(ops);
```  

## 全量使用方式
```code[javascript]
    AsyncRequest.callService({
        url: '/ta/applet/oauth/codeOauth',
        data: {
            wxaccountAppid: Config.appid_WX,
        },
    }).success(function (data) {
        console.log("访问成功，数据为：", data);
    }).fail(function (data, msg) {
        console.log("业务失败，失败信息为：", msg);
    }).tokenError(function (data) {
        console.log("用户信息失效!", data);
    }).error(function (data, msg) {
        console.log("系统错误，错误信息为：", data);
    }).xhrError(function (error) {
        console.log("网络请求失败:", error);
    }).complete(function () {
        console.log("请求完成");
    });
```

```code[javascript]
AsyncRequest.callService({
    url: '/ta/applet/oauth/codeOauth',
    data: {
        wxaccountAppid: Config.appid_WX,
    },
    success(data){
        console.log("访问成功，数据为：", data);
    },
    fail(data, msg) {
        console.log("业务失败，失败信息为：", msg);
    },
    tokenError(data) {
        console.log("用户信息失效!", data);
    },
    error(data, msg) {
        console.log("系统错误，错误信息为：", data);
    },
    xhrError(error) {
        console.log("网络请求失败:", error);
    },
    complete() {
        console.log("请求完成");
    }
});
```

```code[javascript]
    AsyncRequest.callServices([{
        url: '/ta/applet/oauth/codeOauth',
        data: {
            wxaccountAppid: Config.appid_WX,
        },
    },{
        url: '/ta/applet/oauth/codeOauth',
        data: {
            wxaccountAppid: Config.appid_WX,
        },
    }]).success(function (data1,data2) {
        console.log("访问成功，数据为：", data1,data2);
    }).fail(function (data, msg) {
        console.log("业务失败，失败信息为：", msg);
    }).tokenError(function (data) {
        console.log("用户信息失效!", data);
    }).error(function (data, msg) {
        console.log("系统错误，错误信息为：", data);
    }).xhrError(function () {
        console.log("网络请求失败:", data);
    }).complete(function () {
        console.log("请求完成");
    });
```
```code[javascript]
AsyncRequest.callServices([{
    url: '/ta/applet/oauth/codeOauth',
    data: {
        wxaccountAppid: Config.appid_WX,
    },
},{
    url: '/ta/applet/oauth/codeOauth',
    data: {
        wxaccountAppid: Config.appid_WX,
    },
}],{
    success(data1,data2){
        console.log("访问成功，数据为：", data1,data2);
    },
    fail(data, msg) {
        console.log("业务失败，失败信息为：", msg);
    },
    tokenError(data) {
        console.log("用户信息失效!", data);
    },
    error(data, msg) {
        console.log("系统错误，错误信息为：", data);
    },
    xhrError(error) {
        console.log("网络请求失败:", error);
    },
    complete() {
        console.log("请求完成");
    }
})
```

## 拦截请求
```code[javascript]
AsyncRequest.interceptors.request.use(function (request) {
    let {url, data} = request;
    //....
    return request;
})
```
### 开启mock数据
```code[javascript]
/* 开启mock模式 */
AsyncRequest.openMock(async function ({url, params}) {
    /* 使用原始请求 */
    return {mock: false};
    /* 使用模拟数据 */
    return {type: 'success', data: 1};
    return {type: 'fail', data: 1, msg: "xxx"};
    return {type: 'error', data: 1};
    return {type: 'xhrError', data: 1};
    return {type: 'tokenError', data: 1};
});
```
