【发布时间】:2020-06-21 09:47:13
【问题描述】:
我写了一个函数来从后端服务器检索一些数据
getEventList() {
return this.request({
url: '/event/v1/list'
})
}
getEventList() 返回一个 Promise,但现在我需要先检查本地缓存。
getEventList() {
if local cache exists
return local cache
return this.request({
url: '/event/v1/list'
})
}
本地缓存是一个数组,请求结果是一个promise。一个函数有两种不同的返回类型,我应该怎么做才能让getEventList()随时返回一个数组?
【问题讨论】:
-
如果缓存结果可用,则将其包装在 Promise 中,因此您的函数将始终返回
Promise<A[]> -
您绝对应该返回一个用数组解析的
Promise。始终与函数的返回类型保持一致。只需执行return Promise.resolve([...])即可。 -
只需将
this.request(...)本身放入缓存中...! -
^ 这不是一个好主意,因为你会在 promise 上调用多个
.thens,并且不必要地存储整个 promise 以及相关的上下文...... 编辑: 事实证明这实际上有好处,见下文 -
你也可以只创建函数
async,然后它总是返回一个promise。
标签: javascript ecmascript-6 promise async-await