hi ARAM

在同步任务中加入异步任务

2023/06/28

因为一些迭代原因,有可能会碰到要在同步任务中加入异步任务的情况。

这种时候如果本身代码是在一个async函数中,或者有Promise加持的情况下,会比较好改。

async function fn() {
  syncTask();

  syncTask();

  // ...
  await AsyncTask();
  // ...

  syncTask();

  syncTask();
}

但是如果业务逻辑比较糅杂,一层一层比较深,又都是同步代码的时候,就比较麻烦。

这里有个概念方案,先记录一下,后续会验证。

核心是 HTTP + Service Worker 的能力。

在Worker中编写异步任务,然后利用Service Worker可以拦截请求。

在业务逻辑中通过 XMLHttpRequest 发起HTTP请求,被Service Worker拦截,拦截后执行异步任务。

这里的关键在于,XMLHttpRequest对象在发起请求时候要配置成同步的,这样就会等HTTP请求响应后,再执行后续逻辑,达到了“异步变同步”的效果。

const asyncTask = (taskId) => {
  // 发起HTTP请求
};

class Comp extends PureComponent {
  // ...

  method = () => {
    this.a();

    // 同步的
    asyncTask('task1');

    this.b();
  };

  // ...
}

上一篇:还在痛苦迭代的超级老系统首屏提速
下一篇:React中useState初始值造成的性能问题