Promise.race()怎么知道先返回是哪一个请求???
比较读取本地缓存和请求接口数据的速度,如果是本地缓存先返回的那么无所谓, 但如果是请求接口先返回的那么会导致后来的本地缓存的旧结果把请求接口的新数据给替换掉了,怎么避免这种情况呢???
相关代码
// 第一个请求 获取缓存到本地的数据
function getLocal(storageKey) {
return new Promise((resolve, reject) => {
wx.getStorage({
key: storageKey,
success(res) {
resolve(res.data);
},
fail(error) {
reject(error);
},
});
});
}
// 第二个请求 获取接口返回的数据
function getRequestApi(options) {
return request({
url: '',
data: {
...options,
}
});
}
// 请求的页面中
Promise.race([getLocal('storageKey'), getRequestApi(options)]).then(//希望在这里能判断出是谁先执行完返回的);
上面代码是我打算用Promise.race来进行比较,但是发现只能拿到先返回的数据 但是并不能确定是哪个请求先完成的。。。怎么解决呢????
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
promise.race会返回最开始执行完成的那个promise结果,而不管这个请求操作是resolve的还是rejected,在你上面的场景里,你可以在每一个操作的返回结果中注入标签,比如下面的操作方式:
把
getHandPickShop
放在getLocalStorage
后再执行如果没有localStorage这执行
getHandPickShop
, 否则直接返回不需要用到
race
看了同事最后正确的写法,自己理解着模拟了一段代码出来,大致的逻辑思想是不变的。
有两个点是开始做的时候没有注意的:
1、异步请求赋值 var getLocal = getRequest(2000).then((res) => res)
这样保证了只请求一次
2、Promise.race()函数,只用来处理一种情况 就是getLocal正确返回数据并把数据放到页面上