Жду цикла forEach - PullRequest
       2

Жду цикла forEach

0 голосов
/ 22 января 2020

У меня есть конечная точка express, которая выполняет ряд действий, 1 из которых - проверка доступности доменных имен по API GoDaddy. Я не понимаю, как я могу go ожидать результатов.

l oop будет повторять мой массив tlds и проверять доступность доменного имени для каждого из них. В настоящее время ax ios вернет обещание от checkDomainAvailability, разрешения и pu sh данных в массив domains (я уверен, что это можно записать лучше, но я не очень разбираюсь в JS).

app.post("/domains", async (req, res) => {
  var brand = req.body.brand;
  let domains = [];

  // check domain availability
  const tlds = ["dev", "com", "tv", "io", "app", "me"];
  tlds.forEach(tld => {
    let domain = `${brand}.${tld}`;
    godaddy.checkDomainAvailability(domain).then(data => {
      domains.push(data);
    });
  });

res.send(domains);
}

godaddy.checkDomainAvailability()

const checkDomainAvailability = function(domain) {
  return api
    .get("/domains/available", {
      params: {
        domain: domain,
        checkType: "FULL",
        forTransfer: false
      }
    })
    .then(res => {
      return res.data;
    })
    .catch(err => {
      logger.error("Godaddy", err);
    });
};

Очевидно, что текущий результат состоит в том, что express отправляет результат доменов до того, как каждый будет повторен. Как я могу сделать это в ожидании forEach l oop?

Я пытался использовать for await следующим образом, но вижу те же результаты.

  // check domain availability
  const tlds = ["dev", "com", "tv", "io", "app", "me"];
  for await (let tld of tlds) {
    let domain = `${brand}.${tld}`;
    godaddy.checkDomainAvailability(domain).then(data => {
      domains.push(data);
    });
  }

1 Ответ

2 голосов
/ 22 января 2020

Самое простое решение здесь было бы заключить l oop logi c в другую (async) функцию, а затем await результат этой функции в вашем основном наборе кода. Например:

app.post("/domains", async (req, res) => {
  var brand = req.body.brand;

  // check domain availability
  const tlds = ["dev", "com", "tv", "io", "app", "me"];
  let domains = await checkTLDs(tlds, brand);

  res.send(domains);
}

Здесь checkTLDs() - это функция async, которая обрабатывает цикл. Затем ваш основной код может подождать, пока он завершит sh, прежде чем он сделает res.send().

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