简体   繁体   中英

Items not getting pushed to an array inside the Javascript promise

In the following exported function which is from a Nextjs app as an API page, the domainnames array is returning nothing in the 200 response.

However, if I do not use the GetDomainStatus() function and just push items from response.data.results into domainnames , then the JSON response is filled.

export default function GetSuggestions(req, res){
const keyword = req.query.q;
const tlds = '.com,.net,.io,.org,.co,.xyz,.app,.us,.blog,.shop,.land,.video,.review,.host,.dev';
let queryPath = `${suggestionsURL}?include-registered=false&tlds=${tlds}&include-suggestion-type=true&sensitive-content-filter=true&use-numbers=true&max-length=20&lang=eng&max-results=100&name=${keyword}&use-idns=false`
let domainnames = [];

axios.get(queryPath).then(response => {

  response.data.results.forEach(item => {

      GetDomainStatus(item.name).then(a => {
        domainnames.push({
          name: item.name,
          avail: a
        })
      })
  })
  res.status(200).json(domainnames);
});

}

is this a scope issue where I actually cannot access domainnames array from within the promise?

This solution worked. Not sure if its the best, but uses the promise.all solution.

const domainnames = [];
const promises = [];

axios.get(queryPath).then(response => {

  response.data.results.forEach(item => {

    let newPromise = GetDomainStatus(item.name).then(a => {
        domainnames.push({
          name: item.name,
          avail: a
        })
    });
    promises.push(newPromise);
  })
  Promise.all(promises).then(r => res.status(200).json(domainnames));

});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM