面试官: 异步请求数据缓慢且回调函数必须执行的冲突??

面试官: 有一个请求接口,返回数据量庞大,如果请求非常慢,而我的回调函数必须执行,怎么办??

我: 可以设置一个默认值么??

面试官: 不行,数据必须保证真实性

我: 那只能等待数据加载完成才能执行回调啊,可是很慢啊,只能等啊

面试官: 嗯,对,然后呢?

我: 可以使用Promise回调开辟一个微任务让js轮训结果

面试官: 你怎么老想着promise回调呢...

我,额。。。设置一个全局变量,请求数据后改变这个flag状态,使用定时器轮训这个变量直到发生变化再执行回调。或者设置Object.defineprototype的setting方法监听回调,这个更快点。

面试官: 这跟promise一样的啊,我的意思是必须执行回调

我:。。。。。。。你的意思是我必须等待数据返回才能执行回调,但是我又要执行回调。。。。(excuse me ??),这个不清楚....

面试官: 不行啊你

阅读 3.8k
6 个回答

service worker 里面跑一个 WebSocket,设置一个数据结束标记,断了自动重连。面试官的意思多半是要解决连接超时、中断之类的问题。

题主可能是经验不太多,不过面试官也好不到哪儿去,而且如果题主转述无误,面试官的需求描述也有问题。

可能是想让给加个loading动画?这个以后工作了怎么办?天天猜谜么?

数据量庞大使用分页不就行了,数据量过多导致请求缓慢那是后端的问题

jsonp回调?websocket主动通知?

我的项目中就有这种问题,一个后端接口需要20s,而我还必须用到这个数据,然后页面就很卡,
我的想法:
1.数据变化不大的部分用浏览器缓存,设过期时间,定期去更新。
2.数据一定用异步处理axios,promise,async都可。
3.异步提前请求数据emmm...因为明知道用户进页面就要等20s,我就在前一个页面把请求先发了,然后把拿过来的数据先存着,然后点下一步的时候,直接用数据。
4.如果数据可以分部发回来,考虑分页,前台压力就很小!
5.这个问题一是网络问题,二真的是后台的问题!!!应该考虑让后台优化,而不是前台优化,前台能做的是只有在拿到数据后,很快渲染出来。
ps:我们那个接口后台20s,前台拿到数据到渲染结束只需要3s

面试官划的重点在前面
1 回调函数必须执行
2 数据必须保证真实性

考察点是有没有思路能用promise回调以外的机制,验证数据的真实性
因为回调函数何时被执行,是否能执行是不可控的

可用做法也不少,简单一点可以设一个标志变量,默认为0,让回调函数在执行的最末尾改变它为1

复杂一点数据接口要改动,请求时传递查询批次号,
额外再加一个检验接口,这个检验接口需要做到能很快反复调用,做的是按查询时传递的数据批次号返回数据检验和
浏览器这边定期算数据检验和做比对。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题