【问题标题】:How should I use promise in my function to ensure return type correctly [duplicate]我应该如何在我的函数中使用 promise 来确保返回类型正确[重复]
【发布时间】: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


【解决方案1】:

也从您的缓存检查中返回一个承诺:

getEventList() {

  if (cached) {
     return Promise.resolve(cacheResult);
  }

  return this.request({
    url: '/event/v1/list'
  })
  
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-05
    • 2023-02-22
    • 2020-10-04
    • 2019-07-08
    • 2013-04-16
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多