【问题标题】:Destructuring async properties in JavaScript/TypeScript在 JavaScript/TypeScript 中解构异步属性
【发布时间】:2021-12-20 02:59:41
【问题描述】:

有没有办法在 JavaScript/TypeScript 中通过解构获取 async 属性?

像这样:

class A {
  public get x() {
    return this.getX()
  }

  private async getX() {
    return 5
  }
}

async function f(a : A) {
  const { x } = a

  console.log(x) // Promise
}
async function g(a : A) {
  // works as const x = await a.x
  const { await x } = a

  console.log(x) // 5
}

【问题讨论】:

  • const { x } = await a
  • @DimaParzhitsky,我认为它会返回一个Promise,因为它正在等待a,而不是a.x
  • 好的,知道了。不要评判我,人们经常混淆await a.x(await a).x
  • 恐怕JavaScript中还没有这样的语法,你必须这样做const x = await a.x
  • 不,没有。此外,让 getter 返回承诺(通常涉及副作用)也很奇怪,您的实际用例是什么?

标签: javascript typescript async-await destructuring


【解决方案1】:

如果允许使用效用函数, 以下将起作用。
它的副作用是执行所有属性的 getter。

const classToObject = async theClass => {
  const originalClass = theClass || {}
  const keys = Object.getOwnPropertyNames(Object.getPrototypeOf(originalClass))
  let classAsObj = {}
  for(const key of keys) {
    classAsObj[key] = await originalClass[key]    
  }
  return classAsObj
}


async function g(a : A) {
  // works as const x = await a.x
  const {x} = await classToObject(a);
  console.log(x) // 5
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2021-06-01
    • 2012-01-02
    • 1970-01-01
    • 2020-03-17
    • 2020-12-07
    • 2019-07-29
    相关资源
    最近更新 更多