HarmonyOS 鸿蒙Next无感知刷新登录态的代码设计疑问

HarmonyOS 鸿蒙Next无感知刷新登录态的代码设计疑问

想要咨询一个场景。应用当登录态失效,需要做refreshToken操作,同时无感知处理。目前利用三方库axios中的拦截器进行处理。

想咨询一个问题,当我有多个请求并发的时候,只希望最先获取到错误码的请求执行refresh操作,并且替换缓存的token,其他请求暂停等待refresh完成后继续执行。

那么基于上述场景,安卓的异步通常来自于多线程,那么通过synchronize进行加锁可以处理这个并发问题。

对于arkts而言,理解上是单线程模型?async await更类似于安卓kotlin语言的协程?

arkts面对这种场景,应当如何处理并发,还是说因为单线程模型,所以不用担心并发问题?


更多关于HarmonyOS 鸿蒙Next无感知刷新登录态的代码设计疑问的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
ArkTS本身是单线程的,不涉及线程安全问题。ArkTS可以实现多线程

async提供异步并发能力,异步代码会被挂起并在之后继续执行,同一时间只有一段代码执行,适用于单次I/O任务的场景开发,例如一次网络请求、一次文件读写等操作。参考链接:异步并发 (Promise和async/await)-ArkTS并发-ArkTS(方舟编程语言)-应用框架 - 华为HarmonyOS开发者 (huawei.com)

使用async不是按照顺序执行,不符合您的需求。如果按照您的需求,需要按照顺序执行,可以参考taskpool中的线程依赖:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-taskpool-V5#adddependency11

使用以下demo也可以实现顺序执行,下面是一个使用async/await的例子,其中模拟了一个异步操作,该操作会在3秒钟后返回一个字符串。

async function myAsyncFunction(): Promise<string> {
  const result: string = await new Promise((resolve: Function) => {
    setTimeout(() => {
      resolve('Hello, world!');
    }, 3000);
  });
  console.info(result); // 输出: Hello, world!
  return result
}
[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
  [@State](/user/State) message: string = 'Hello World';
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(async () => {
            let res = await myAsyncFunction();
            console.info("res is: " + res);
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

在上述示例代码中,使用了await关键字来等待Promise对象的解析,并将其解析值存储在result变量中。

更多关于HarmonyOS 鸿蒙Next无感知刷新登录态的代码设计疑问的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对HarmonyOS 鸿蒙Next无感知刷新登录态的代码设计疑问,以下提供直接相关的回答:

在HarmonyOS中实现无感知刷新登录态,通常涉及系统级权限管理和认证机制。首先,确保你的应用已经正确集成了HarmonyOS的账户系统,包括用户认证和权限管理模块。

对于无感知刷新,可以采用以下策略:

  1. Token自动续期:在应用启动时或后台运行时,定期检查登录Token的有效性。如果即将过期,则自动请求续期,无需用户干预。

  2. 后台服务监听:利用HarmonyOS的后台服务,监听Token状态变化,一旦检测到过期,立即触发续期流程。

  3. 系统级通知:如果Token续期失败,系统可以发出通知,提醒用户重新登录,但这通常不是无感知刷新的一部分,除非能自动触发备用登录机制(如短信验证码登录)。

  4. 安全存储:确保Token和其他敏感信息在设备上的安全存储,防止被恶意软件窃取。

  5. API设计:设计简洁的API接口,供应用内部调用,以实现Token的自动检查与续期。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部