Есть ли способ рекурсивного ожидания значения в Javascript? - PullRequest
2 голосов
/ 27 марта 2020

Я делаю проект с 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
}

1 Ответ

1 голос
/ 27 марта 2020

Это интересная ситуация. Нет, здесь нет ничего, что могло бы помочь вам c, вам нужно использовать свою функцию или подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...