autobots-commonlib 1.2.8 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,4 +1,20 @@
1
1
  autobots commonlib
2
+
3
+ "1.3.3"
4
+ 支持android下fetch接口json数组数据并兼容旧版本
5
+
6
+ "1.3.2"
7
+ 兼容js的fetch缓存方法修改异常情况
8
+
9
+ "1.3.1"
10
+ 修改主软件网络库的js桥接代码,兼容js的fetch缓存方法
11
+
12
+ "1.3.0"
13
+ 修改主软件网络库的js桥接代码,增加fetch支持缓存接口数据
14
+
15
+ "1.2.9"
16
+ 增加主软件网络库的js桥接代码,对外提供js端的网络访问方法和demo程序
17
+
2
18
  "1.2.8"
3
19
  优化小程序右滑返回操作,增加普通RN应用右滑返回支持
4
20
 
package/http-demo.js ADDED
@@ -0,0 +1,236 @@
1
+ import { Toast, Native, QCRNetworkModule } from 'autobots-commonlib';
2
+ const NetworkModule = QCRNetworkModule
3
+
4
+ /**
5
+ * fetch方式-消息体为form类型
6
+ * @param url
7
+ * @param params
8
+ * @param config
9
+ * @returns {Promise<unknown | [any,null]>}
10
+ */
11
+ const fetchForm = (url, params = {}, config = {}) => {
12
+ const options = {
13
+ method: 'post',
14
+ headers: {
15
+ 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
16
+ },
17
+ timeout: 15000,
18
+ ...config
19
+ };
20
+ return NetworkModule.fetch(Native.getPostUrl(url), options, params).then((result) => {
21
+ //console.log("***--fetch--*** request----res="+result);
22
+ const res = typeof (result) == "string" ? JSON.parse(result) : result;
23
+ if (String(res.status) === '1' || String(res.code) === '0') {
24
+ // 网络请求成功和业务数据成功
25
+ return ([null, res]);
26
+ } else {
27
+ // Toast.Show(res.data.info);
28
+ return ([new Error('status不为1'), res]);
29
+ }
30
+ }).catch(error => {
31
+ return [error, null];
32
+ })
33
+ };
34
+
35
+ /**
36
+ * fetch方式-消息体为json类型
37
+ * @param url
38
+ * @param params
39
+ * @param config
40
+ * @returns {Promise<unknown | [any,null]>}
41
+ */
42
+ const fetchJson = (url, params = {}, config = {}) => {
43
+ const options = {
44
+ method: 'post',
45
+ headers: {
46
+ Accept: 'application/json',
47
+ 'Content-Type': 'application/json'
48
+ },
49
+ timeout: 15000,
50
+ ...config
51
+ };
52
+ return NetworkModule.fetch(Native.getPostUrl(url), options, params).then((result) => {
53
+ const res = typeof (result) == "string" ? JSON.parse(result) : result;
54
+ if (res.status === 1) {
55
+ // 网络请求成功和业务数据成功
56
+ return [null, res.returnObject];
57
+ } else {
58
+ return [new Error('status不为1'), res.info];
59
+ }
60
+ }).catch(error => {
61
+ console.log(url)
62
+ console.log(error);
63
+ Toast.Show('网络请求失败');
64
+ return [error, null];
65
+ })
66
+ };
67
+
68
+ /**
69
+ * post方式-消息体为form类型
70
+ * @param url
71
+ * @param params
72
+ * @param header
73
+ * @returns {Promise<any>}
74
+ */
75
+ const postUseForm = (url, params = {}, header = {}) => {
76
+ const eventId = url.split('?')[0];
77
+ let queryParam = sliptParams(url);
78
+ let param = Object.assign(params, queryParam);
79
+ let json = JSON.stringify(param);
80
+ return NetworkModule.postForm(Native.getPostUrl(url), header, params).then((result) => {
81
+ const res = typeof (result) == "string" ? JSON.parse(result) : result;
82
+ if (String(res.status) === '1' || String(res.code) === '0') {
83
+ // 网络请求成功和业务数据成功
84
+ return ([null, res]);
85
+ } else {
86
+ // Toast.Show(res.data.info);
87
+ return ([new Error('status不为1'), res]);
88
+ }
89
+ }).catch(error => {
90
+ return [error, null];
91
+ })
92
+ };
93
+
94
+ /**
95
+ * post方式-消息体为json类型
96
+ * @param url
97
+ * @param params
98
+ * @param header
99
+ * @returns {Promise<any>}
100
+ */
101
+ const postUseJson = (url, params = {}, header = {}) => {
102
+ //console.log("***--fetch--*** postUseJson----url="+Native.getPostUrl(url));
103
+ //console.log("***--fetch--*** postUseJson----params="+JSON.stringify(params));
104
+ return NetworkModule.postJson(Native.getPostUrl(url), header, params).then((result) => {
105
+ //console.log("***--fetch--*** postUseJson----result="+result);
106
+ const res = typeof (result) == "string" ? JSON.parse(result) : result;
107
+ if (res.status === 1) {
108
+ // 网络请求成功和业务数据成功
109
+ return [null, res.returnObject];
110
+ } else {
111
+ //Toast.Show(res.data.info);
112
+ return [new Error('status不为1'), res.info];
113
+ }
114
+ }).catch(error => {
115
+ console.log(url);
116
+ console.log(error);
117
+ Toast.Show('网络请求失败');
118
+ return [error, null];
119
+ })
120
+ };
121
+
122
+ /**
123
+ * get方式
124
+ * @param url
125
+ * @param body
126
+ * @param empId
127
+ * @returns {any}
128
+ */
129
+ const httpGet = function (url, body, empId) {
130
+ //增加汽车人网页传递参数
131
+ url = addUrlParams(url);
132
+ if (body != {}) {
133
+ var queryString = toQueryString(body);
134
+ var urlStr = url + (url.indexOf("?") < 0 ? "?" : "&") + queryString;
135
+ return NetworkModule.get(urlStr, { "auto-eid": empId, "Accept": "application/json;charset=UTF-8" }, {}).then(result => {
136
+ const res = typeof (result) == "string" ? JSON.parse(result) : result;
137
+ return res
138
+ });
139
+ }
140
+ };
141
+ const addUrlParams = function (url) {
142
+ var c = Config.get();
143
+ return c && c.urlParams
144
+ ? url + (url.indexOf("?") < 0 ? "?" : "&") + c.urlParams
145
+ : url;
146
+ };
147
+ const toQueryString = function (obj) {
148
+ var ret = [];
149
+ for (var key in obj) {
150
+ key = encodeURIComponent(key);
151
+ var values = obj[key];
152
+ if (values && values.constructor == Array) {
153
+ //数组
154
+ var queryValues = [];
155
+ for (var i = 0, len = values.length, value; i < len; i++) {
156
+ value = values[i];
157
+ queryValues.push(toQueryPair(key, value));
158
+ }
159
+ ret = ret.concat(queryValues);
160
+ } else {
161
+ //字符串
162
+ ret.push(toQueryPair(key, values));
163
+ }
164
+ }
165
+ return ret.join("&");
166
+ };
167
+ const toQueryPair = function (key, value) {
168
+ if (typeof value == "undefined") {
169
+ return key;
170
+ }
171
+ return key + "=" + encodeURIComponent(value === null ? "" : String(value));
172
+ };
173
+
174
+ /**
175
+ * 下载文件方式
176
+ * @param url
177
+ * @param fileName
178
+ * @returns {Promise<any>}
179
+ */
180
+ const downloadFile = (url, fileName = '') => {
181
+ if (fileName.length == 0) {
182
+ let timestamp = (new Date()).getTime();//获取当前时间错
183
+ let random = String(((Math.random() * 1000000) | 0))//六位随机数
184
+ fileName = `${timestamp + random}.jpg`;
185
+ }
186
+ console.log('---downloadFile---url=' + url);
187
+ console.log('---downloadFile---fileName=' + fileName);
188
+ return NetworkModule.downFile(url, fileName).then(res => {
189
+ //res=storage/emulated/0/Android/data/com.autohome.helper/files/371be190c42a0125fd3f5c223835fcbf/1712193802418823497.jpg
190
+ return res
191
+ }).catch(error => {
192
+ return error
193
+ })
194
+ }
195
+
196
+ /**
197
+ * 上传文件方式
198
+ * @param url
199
+ * @param pictures 路径数组,支持多文件上传
200
+ * @param empId
201
+ * @returns {Promise<any>}
202
+ */
203
+ const uploadImage = (url, pictures) => {
204
+ let formList = [];
205
+ pictures.map((val, idx) => {
206
+ const splits = val.split('.');
207
+ const suffix = splits[splits.length - 1];
208
+ const fileName = idx + '.' + suffix;
209
+ //fileKey,文件标识
210
+ let file = { uri: val, type: 'multipart/form-data', name: fileName, fileKey: 'fileData' };
211
+ formList.push(file);
212
+ });
213
+ return NetworkModule.postFile(Native.getPostUrl(url), {}, {}, formList).then(res => {
214
+ if (typeof (res) == 'string') {
215
+ res = JSON.parse(res)
216
+ }
217
+ if (res.status === 1) {
218
+ // 网络请求成功和业务数据成功
219
+ return [null, res.returnObject];
220
+ } else {
221
+ // Toast.Show(res.data.info);
222
+ let errorMessage = res.info ? res.info.replace(/\s+/g, "") : ''
223
+ if (errorMessage && errorMessage.length > 0) {
224
+ Toast.Show(errorMessage);
225
+ }
226
+ return [new Error('status不为1'), null];
227
+ }
228
+ }).catch(error => {
229
+ console.log('url === ' + url)
230
+ console.log(error);
231
+ Toast.Show('网络请求失败');
232
+ return [error, null];
233
+ });
234
+ }
235
+
236
+ module.exports = { fetchForm, fetchJson, postUseForm, postUseJson, httpGet, downloadFile, uploadFile };
package/index.js CHANGED
@@ -12,6 +12,7 @@ import BackAndroid from './BackAndroid';
12
12
  import ImageBackground from './ImageBackground';
13
13
  import ViewPropTypes from './ViewPropTypes';
14
14
  import NativeManager from './lib/NativeManager'
15
+ import NetworkModule from './lib/QCRNetworkModule'
15
16
 
16
17
  module.exports = {
17
18
  NativeManager,
@@ -26,5 +27,6 @@ module.exports = {
26
27
  Others,
27
28
  BackAndroid,
28
29
  ImageBackground,
29
- ViewPropTypes
30
+ ViewPropTypes,
31
+ NetworkModule
30
32
  }
@@ -0,0 +1,419 @@
1
+ 'use strict';
2
+ import { NativeModules, Platform } from 'react-native';
3
+ import Utils from "../util/utils";
4
+
5
+ var QCRRNNetworkModule = NativeModules.QCRRNNetworkModule;
6
+
7
+ var NetworkModule = {
8
+ fetch(url: String, config: Object, params: Object, cacheFunction: Function) {
9
+ return new Promise(function (resolve, reject) {
10
+ if (QCRRNNetworkModule && !Utils.isChooseOldNetApi(params)) {
11
+ asyncFetch(url, config, params, cacheFunction, resolve, reject);
12
+ } else {
13
+ asyncFromFetch(url, config, params, resolve, reject);
14
+ }
15
+ });
16
+ },
17
+
18
+ get(url: String, headers: Object, params: Object) {
19
+ let requestUrl = url;
20
+ if (params && Object.keys(params).length > 0) {
21
+ if (requestUrl.indexOf('?') >= 0) {
22
+ requestUrl += '&'
23
+ } else {
24
+ requestUrl += '?'
25
+ }
26
+ for (let key in params) {
27
+ requestUrl += `${key}=${params[key]}`
28
+ }
29
+ }
30
+ return new Promise(function (resolve, reject) {
31
+ if (QCRRNNetworkModule) {
32
+ asyncGet(requestUrl, headers, resolve, reject);
33
+ } else {
34
+ asyncGetFromFetch(requestUrl, headers, resolve, reject);
35
+ }
36
+ });
37
+ },
38
+
39
+ postForm(url: String, header: Object, form: Object) {
40
+ return new Promise(function (resolve, reject) {
41
+ if (QCRRNNetworkModule) {
42
+ asyncPostForm(url, header, form, resolve, reject);
43
+ } else {
44
+ asyncPostFormFetch(url, header, form, resolve, reject);
45
+ }
46
+ });
47
+ },
48
+
49
+ postJson(url: String, header: Object, json: Object) {
50
+ return new Promise(function (resolve, reject) {
51
+ if (QCRRNNetworkModule) {
52
+ asyncPostJson(url, header, json, resolve, reject);
53
+ } else {
54
+ asyncPostJsonFetch(url, header, json, resolve, reject);
55
+ }
56
+ });
57
+ },
58
+
59
+ postFile(url: String, header: Object, param: Object, files: Array) {
60
+ return new Promise(function (resolve, reject) {
61
+ if (QCRRNNetworkModule) {
62
+ asyncPostFile(url, header, param, files, resolve, reject);
63
+ } else {
64
+ asyncPostFileFromFetch(url, header, param, files, resolve, reject);
65
+ }
66
+ });
67
+ },
68
+
69
+ downFile(url: String, fileName: String) {
70
+ return new Promise(function (resolve, reject) {
71
+ if (QCRRNNetworkModule) {
72
+ asyncDownFile(url, fileName, resolve, reject);
73
+ } else {
74
+ asyncDownFileRN(url, fileName, resolve, reject);
75
+ }
76
+ });
77
+ },
78
+
79
+ cancel(url: String) {
80
+ return new Promise(function (resolve, reject) {
81
+ asyncCancel(url, resolve, reject);
82
+ });
83
+ },
84
+
85
+ checkNetState(callback: Function) {
86
+ QCRRNNetworkModule && QCRRNNetworkModule.checkNetState(callback);
87
+ },
88
+
89
+ getNetType(callback: Function) {
90
+ QCRRNNetworkModule && QCRRNNetworkModule.getNetType(callback);
91
+ },
92
+
93
+ };
94
+
95
+ async function asyncFetch(url: String, config: Object, params: Object, cacheFunction: Function, resolveCallback: Function, rejectCallback: Function) {
96
+ let needReadCache = (config && config.method && config.method.indexOf('cache') >= 0) ? true : false;
97
+ if (needReadCache && cacheFunction) {
98
+ try {
99
+ let response = await QCRRNNetworkModule.getCacheData(url, params);
100
+ if (typeof response === 'string') {
101
+ if (response.trim() != '') {
102
+ response = JSON.parse(response);
103
+ cacheFunction(response);
104
+ }
105
+ } else {
106
+ cacheFunction(response);
107
+ }
108
+ } catch (error) {
109
+ console.log('缓存结果出错:', error)
110
+ }
111
+ }
112
+
113
+ try {
114
+ var events;
115
+ if (Platform.OS === 'ios') {
116
+ events = await QCRRNNetworkModule.fetch(url, config, params);
117
+ } else {//android
118
+ try {
119
+ //处理body为json类型
120
+ let isJsonPost = false;
121
+ if (config && config.headers) {
122
+ if (config.headers['Content-Type'] && config.headers['Content-Type'].indexOf('application/json') >= 0) {
123
+ //if(params && Object.keys(params).length !== 0){
124
+ let jsonparam = {};
125
+ jsonparam.json = params ? JSON.stringify(params) : {};
126
+ config.body = jsonparam;
127
+ isJsonPost = true;
128
+ }
129
+ }
130
+ config = config || {}
131
+ //处理body为form类型
132
+ if (!isJsonPost) {
133
+ config.headers = config.headers || {}
134
+ config.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'
135
+ // 将参数对象中的所有值转换为字符串类型,因为原生只按string类型来处理,否则有其它类型会报解析异常
136
+ const stringifiedParams = {};
137
+ if (params) {
138
+ Object.keys(params).forEach(key => {
139
+ if (typeof params[key] === 'undefined') {
140
+ stringifiedParams[key] = ""; // 将undefined值设为""
141
+ } else {
142
+ stringifiedParams[key] = String(params[key]);
143
+ }
144
+ });
145
+ }
146
+
147
+ let formparam = {};
148
+ formparam.form = JSON.stringify(stringifiedParams);
149
+ config.body = formparam;
150
+ }
151
+
152
+ console.log('asyncFetch 配置信息:', config);
153
+ events = await QCRRNNetworkModule.fetch(url, config);
154
+ if (typeof events === 'string') {
155
+ events = JSON.parse(events);
156
+ }
157
+ } catch (error) {
158
+ rejectCallback(error);
159
+ }
160
+ }
161
+ resolveCallback(events);
162
+ } catch (error) {
163
+ console.log('结果:', error)
164
+ rejectCallback(error);
165
+ }
166
+ }
167
+
168
+ async function asyncFromFetch(url: String, config: Object, params: Object, resolveCallback: Function, rejectCallback: Function) {
169
+ try {
170
+ let isJsonPost = false;
171
+ if (config && config.headers) {
172
+ if (config.headers['Content-Type'] && config.headers['Content-Type'].indexOf('application/json') >= 0) {
173
+ config.body = params ? JSON.stringify(params) : {};
174
+ isJsonPost = true;
175
+ }
176
+ }
177
+ config = config || {}
178
+ if (!isJsonPost) {
179
+ config.headers = config.headers || {}
180
+ config.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'
181
+ let requestBody = '';
182
+ for (let key in params) {
183
+ requestBody += `${key}=${params[key] || ''}&`
184
+ }
185
+ config.body = requestBody.length > 0 ? requestBody.slice(0, -1) : ""
186
+ }
187
+
188
+ let requestMethod = (config.method && config.method.length > 0) ? config.method : 'get';
189
+ if (config.method && config.method.length > 0 && config.method.indexOf('_cache') >= 0) {
190
+ requestMethod = config.method.replace('_cache', '');
191
+ }
192
+ config.method = requestMethod;
193
+
194
+ console.log('配置信息:', config);
195
+ const response = await fetch(url, config);
196
+ const json = await response.json();
197
+ resolveCallback(json);
198
+ } catch (error) {
199
+ rejectCallback(error);
200
+ }
201
+ }
202
+
203
+ async function asyncGet(url: String, header: Object, resolveCallback: Function, rejectCallback: Function) {
204
+ try {
205
+ var events;
206
+ if (Platform.OS === 'ios') {
207
+ events = await QCRRNNetworkModule.get(url, header);
208
+ } else {
209
+ events = await QCRRNNetworkModule.get(url, header, null);
210
+ if (typeof events === 'string') {
211
+ events = JSON.parse(events);
212
+ }
213
+ }
214
+ resolveCallback(events);
215
+ } catch (error) {
216
+ rejectCallback(error);
217
+ }
218
+ }
219
+
220
+ async function asyncGetFromFetch(url: String, header: Object, resolveCallback: Function, rejectCallback: Function) {
221
+ try {
222
+ var events = await fetch(url, { headers: header || {} })
223
+ const json = await events.json();
224
+ resolveCallback(json);
225
+ } catch (error) {
226
+ rejectCallback(error);
227
+ }
228
+ }
229
+
230
+ async function asyncPostForm(url: String, headers: Object, form: Object, resolveCallback: Function, rejectCallback: Function) {
231
+ try {
232
+ console.log('--fetch--asyncPostForm url:', url);
233
+ var events;
234
+ if (Platform.OS === 'ios') {
235
+ events = await QCRRNNetworkModule.postForm(url, headers, form);
236
+ } else {//android
237
+ try {
238
+ headers = headers || {};
239
+ headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';
240
+ // 将参数对象中的所有值转换为字符串类型,因为原生只按string类型来处理,否则有其它类型会报解析异常
241
+ const stringifiedForms = {};
242
+ if (form) {
243
+ Object.keys(form).forEach(key => {
244
+ if (typeof form[key] === 'undefined') {
245
+ stringifiedForms[key] = ""; // 将undefined值设为""
246
+ } else {
247
+ stringifiedForms[key] = String(form[key]);
248
+ }
249
+ });
250
+ }
251
+ console.log('--fetch--asyncPostForm 配置信息:', stringifiedForms);
252
+ events = await QCRRNNetworkModule.postForm(url, headers, stringifiedForms);
253
+ if (typeof events === 'string') {
254
+ events = JSON.parse(events);
255
+ }
256
+ } catch (error) {
257
+ rejectCallback(error);
258
+ }
259
+ }
260
+ resolveCallback(events);
261
+
262
+ } catch (error) {
263
+ rejectCallback(error);
264
+ }
265
+ }
266
+
267
+ async function asyncPostJson(url: String, headers: Object, json: Object, resolveCallback: Function, rejectCallback: Function) {
268
+ try {
269
+ console.log('--fetch--asyncPostJson url:', url);
270
+ var events;
271
+ if (Platform.OS === 'ios') {
272
+ events = await QCRRNNetworkModule.postJSON(url, headers, json);
273
+ } else {//android
274
+ try {
275
+ headers = headers || {};
276
+ headers['Content-Type'] = 'application/json';
277
+ headers['Accept'] = 'application/json';
278
+
279
+ // let jsonparam = {};
280
+ let jsonparam = json ? json : {};
281
+ console.log('--fetch--asyncPostJson 配置信息:', jsonparam);
282
+ events = await QCRRNNetworkModule.postJSON(url, headers, jsonparam);
283
+ if (typeof events === 'string') {
284
+ events = JSON.parse(events);
285
+ }
286
+ } catch (error) {
287
+ rejectCallback(error);
288
+ }
289
+ }
290
+ resolveCallback(events);
291
+ } catch (error) {
292
+ rejectCallback(error);
293
+ }
294
+ }
295
+
296
+ async function asyncPostFormFetch(url: String, header: Object, params: Object, resolveCallback: Function, rejectCallback: Function) {
297
+ try {
298
+ let headerDic = header || {}
299
+ headerDic['Content-Type'] = "application/x-www-form-urlencoded; charset=utf-8";
300
+ let requestBody = '';
301
+ if (params) {
302
+ for (let key in params) {
303
+ requestBody += `${key}=${params[key] || ''}&`
304
+ }
305
+ requestBody = requestBody.length > 0 ? requestBody.slice(0, -1) : ""
306
+ }
307
+ var events = await fetch(url, { method: 'POST', headers: headerDic, body: requestBody })
308
+ const json = await events.json();
309
+ resolveCallback(json);
310
+ } catch (error) {
311
+ rejectCallback(error);
312
+ }
313
+ }
314
+
315
+ async function asyncPostJsonFetch(url: String, header: Object, params: Object, resolveCallback: Function, rejectCallback: Function) {
316
+ try {
317
+ let headerDic = header || {}
318
+ headerDic['Content-Type'] = "application/json";
319
+ var events = await fetch(url, { method: 'POST', headers: headerDic, body: JSON.stringify(params) })
320
+ const json = await events.json();
321
+ resolveCallback(json);
322
+ } catch (error) {
323
+ rejectCallback(error);
324
+ }
325
+ }
326
+
327
+ // let file = {uri: params.path, type: 'application/octet-stream', name: 'image.jpg'};
328
+ async function asyncPostFile(url: String, header: Object, param: Object, files: Array, resolveCallback: Function, rejectCallback: Function) {
329
+ try {
330
+ var events = await QCRRNNetworkModule.postFile(url, header, param, files);
331
+ resolveCallback(events);
332
+ } catch (error) {
333
+ rejectCallback(error);
334
+ }
335
+ }
336
+
337
+ async function asyncPostFileFromFetch(url: String, header: Object, param: Object, files: Array, resolveCallback: Function, rejectCallback: Function) {
338
+ try {
339
+ let headerDic = JSON.parse(JSON.stringify(header));
340
+ headerDic['Content-Type'] = 'multipart/form-data';
341
+
342
+ const fd = new FormData()
343
+ files.forEach((element, index) => {
344
+ const fileKey = element['fileKey'];
345
+ fd.append(fileKey, element)
346
+ })
347
+ for (var key in param) {
348
+ fd.append(key, param[key]);
349
+ }
350
+
351
+ var events = await fetch(url, {
352
+ method: 'POST',
353
+ body: fd,
354
+ headers: headerDic
355
+ })
356
+ const json = await events.json();
357
+ resolveCallback(json);
358
+ } catch (error) {
359
+ rejectCallback(error);
360
+ }
361
+ }
362
+
363
+ async function asyncDownFile(url: String, fileName: String, resolveCallback: Function, rejectCallback: Function) {
364
+ try {
365
+ var events = await QCRRNNetworkModule.downFile(url, fileName);
366
+ resolveCallback(events);
367
+ } catch (error) {
368
+ rejectCallback(error);
369
+ }
370
+ }
371
+
372
+ async function asyncDownFileRN(url: String, fileName: String, resolveCallback: Function, rejectCallback: Function) {
373
+ let timestamp = (new Date()).getTime();//获取当前时间错
374
+ let random = String(((Math.random() * 1000000) | 0))//六位随机数
375
+ let dirs = Platform.OS === 'ios' ? RNFS.LibraryDirectoryPath : RNFS.ExternalDirectoryPath; //外部文件,共享目录的绝对路径(仅限android)
376
+ const downloadDest = `${dirs}/${fileName}`;
377
+ const formUrl = url;
378
+ const options = {
379
+ fromUrl: formUrl,
380
+ toFile: downloadDest,
381
+ background: true,
382
+ begin: (res) => {
383
+ console.log('begin', res);
384
+ console.log('contentLength:', res.contentLength / 1024 / 1024, 'M');
385
+ },
386
+ };
387
+ try {
388
+ const ret = RNFS.downloadFile(options);
389
+ ret.promise.then(res => {
390
+ console.log('success', res);
391
+ console.log('file://' + downloadDest)
392
+ let promise = CameraRoll.saveToCameraRoll(downloadDest);
393
+ promise.then(function (result) {
394
+ resolveCallback(result);
395
+ }).catch(function (error) {
396
+ console.log('error', error);
397
+ rejectCallback(new Error(error))
398
+ });
399
+ }).catch(err => {
400
+ rejectCallback(new Error(err))
401
+ });
402
+ } catch (e) {
403
+ rejectCallback(new Error(e))
404
+ }
405
+ }
406
+
407
+ async function asyncCancel(url: String, resolveCallback: Function, rejectCallback: Function) {
408
+ if (!QCRRNNetworkModule) {
409
+ return;
410
+ }
411
+ try {
412
+ var events = await QCRRNNetworkModule.cancel(url);
413
+ resolveCallback(events);
414
+ } catch (error) {
415
+ rejectCallback(error);
416
+ }
417
+ }
418
+
419
+ module.exports = NetworkModule;