Я делаю проект с Javascript, и у меня есть объект, у которого есть получатель, который возвращает обещания. Этот объект может меня высмеивать с помощью этого кода:
async function asyncifiedObject(object) {
let o = {};
let keys = [...Object.keys(object)];
for (let item of keys) {
o.__defineGetter__(item, async () => {
if (object && object[item]) {
if (typeof object[item] == "object") {
// Do other async things, like network requests, etc.
return await asyncifiedObject(object[item]);
} else {
return object[item];
}
}
});
}
return o;
}
Я получаю один из этих объектов, таких как:
let o=asyncifiedObject({hello:{world:{it:{is:{nice:{out:"today"}}}}}})
Когда я go для доступа к свойствам на объекте Я сейчас делаю await (await (await (await (await (await (await o).hello).world).it).is).nice).out
, но это долго и выглядит ужасно.
Я мог бы использовать функцию, например await getAsyncValues(o,"hello","world","it","is","nice","out")
, но мне хотелось бы сделать что-то вроде await o.hello.world.it.is.nice.out
, и это не работает, потому что нужно ждать всех обещаний, а не только первого. Есть ли способ, который мог бы работать?
Кстати, вот пример реализации getAsyncValues
:
async function getAsyncValues(object,...values){
let r=object;
for(let value of values){
r=(await r)[value]
}
return r
}