#javascript #typescript #async-await #destructuring
Вопрос:
Есть ли способ получить async
свойства с помощью деструктурирования в JavaScript/TypeScript?
Подобный этому:
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 }
Комментарии:
1.
const { x } = await a
2. @DimaParzhitsky, я думаю, что он вернется
Promise
, так как его ждутa
, а не ждутa.x
.3. Ладно, понял. Не судите меня, люди часто путают
await a.x
и(await a).x
4. Боюсь, в JavaScript еще нет такого синтаксиса, вам придется сделать
const x = await a.x
5. Нет, это не так. Также странно иметь добытчиков, которые возвращают обещания (которые обычно связаны с побочными эффектами), каков ваш фактический вариант использования?
Ответ №1:
Если разрешено использовать функцию полезности, будет работать следующее.
ее побочный эффект заключается в том, что выполняются получатели для всех свойств.
const classToObject = async theClass =gt; { 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 }