HarmonyOS 如何进行同步代码编程
网络请求使用cookie(有效期30分钟),手机锁屏超30分钟以上。假如打开APP后同时发起五个请求,如何只确保刷新一次cookie,HarmonyOS中如何实现?okhttp请求拦截器代码(假如同时拦截到五次请求过期)。
async intercept(chain: Chain): Promise<Response> {
let request = chain.requestI();
let response = await chain.proceedI(request);
if (!response.isSuccessful()) {
// url重定向login,刷新cookie
let time: number = systemDateTime.getTime(false)
let timeDelay = time - ApiUtils.refreshCookieTime
if (response.responseCode == HttpErrorCode.Forbidden) {
let locationUrl = response.getHeadersEntry('location')
if (locationUrl == ApiUtils.getXwebRequestUrl(Constant.webLogin)) {
LogUtils.warn(API, `cookie timeout !!!, refreshSession, timeDelay : ${timeDelay}}`)
let resp = await ApiUtils.refreshSession() as BaseResp<object>
if (resp.code == HttpErrorCode.Success) {
request.addHeader(ApiUtils.HEADER_COOKIE_KEY, ApiUtils.getCookie())
LogUtils.info(API, '使用新cookie请求 : ' + request.getHeader(ApiUtils.HEADER_COOKIE_KEY))
response = await chain.proceedI(request) // 重新发起请求
}
}
}
}
response = await DecryptInterceptor.parseHttpResponse(chain, response)
return response
}
/**
* 刷新cookie
* @param chain
*/
public static async refreshSession(): Promise<BaseResp<object>> {
return new Promise((resolve: Function) => {
let resp: BaseResp<object> = new BaseResp<object>()
LogUtils.info(API, 'refreshSession start time : ' + systemDateTime.getTime(false))
Api.getXWebService().refreshSession().then(response => {
let faildMsg = ApiUtils.getFailMsg(response) as FaildMsg
if (null != faildMsg) {
LogUtils.warn(API, 'refreshSession faild : ' + faildMsg.getMsg())
resp.code = HttpErrorCode.Fail
} else {
ApiUtils.refreshCookieTime = systemDateTime.getTime(false)
LogUtils.info(API, 'refreshSession success, time : ' + ApiUtils.refreshCookieTime)
}
resolve(resp)
}).catch(
(error: Error) => {
LogUtils.error(API, 'refreshSession error : ' + error.message)
resp.code = HttpErrorCode.Fail
resolve(resp)
}
)
})
}
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS Worker多线程如何进行同步?可否提供样例代码?
2198浏览 • 1回复 待解决
HarmonyOS 如何进行代码检查
1175浏览 • 1回复 待解决
#鸿蒙通关秘籍# HarmonyOS NEXT中的ArkTS如何进行异步编程?
1695浏览 • 1回复 待解决
应用有少量C++代码,C++代码如何进行适配?
1497浏览 • 1回复 待解决
鸿蒙如何进行代码混淆配置和防反编译?
6303浏览 • 2回复 待解决
MVVM设计模式中的ViewModel的顶层数据源是如何与低层数据进行同步的?
1764浏览 • 1回复 待解决
HarmonyOS 如何进行邀请测试
1285浏览 • 1回复 待解决
HarmonyOS 如何进行sdk升级
1060浏览 • 1回复 待解决
分布式数据库,最多能支持多少个设备直接进行同步?
2599浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何使用Surface进行同层渲染绘制?
1315浏览 • 1回复 待解决
HarmonyOS 如何进行音频合成
1478浏览 • 1回复 待解决
HarmonyOS 请问如何进行UrlEncode
1066浏览 • 1回复 待解决
HarmonyOS 如何进行图片裁剪
1803浏览 • 1回复 待解决
HarmonyOS 如何进行堆栈反解
828浏览 • 1回复 待解决
HarmonyOS HAP之间如何进行通信?
1487浏览 • 1回复 待解决
HarmonyOS 如何进行DES加解密
2103浏览 • 1回复 待解决
HarmonyOS如何进行模拟定位?
1228浏览 • 1回复 待解决
如何进行系统崩溃监控?
1758浏览 • 1回复 待解决
HarmonyOS 如何进行HmacSHA1加密
1189浏览 • 1回复 待解决
HarmonyOS SDK 如何进行打包 和 混淆?
1238浏览 • 1回复 待解决
HarmonyOS rcp如何进行fetch流式请求
1155浏览 • 1回复 待解决
HarmonyOS promise调用如何进行串行调用
1503浏览 • 1回复 待解决
HarmonyOS 如何进行数据持久化
1490浏览 • 1回复 待解决
多个Cookie如何进行批量设置
3286浏览 • 1回复 待解决
如何进行页面横竖屏切换
3251浏览 • 1回复 待解决




















可以参考仓颉编程语言的同步机制中的synchronized关键字,搭配ReentrantMutex一起使用来实现该功能,详细使用方法如下:https://developer.huawei.com/consumer/cn/doc/cangjie-guides-V5/sync-V5#可重入互斥锁-reentrantmutex
关于获取仓颉sdk和如何使用,可以参考以下链接:
https://developer.huawei.com/consumer/cn/activityDetail/cangjie-beta/