Как мне заставить мою переменную 'urls' правильно обновляться? - PullRequest
0 голосов
/ 28 декабря 2018
function getSitemapURLs( file ) {
  var urls = [];

  fs.readFile( file, ( err, data ) => {
    if ( err ) throw err;

    parser.parseString( data, ( err, result ) => {
      result = result.urlset.url;

      for ( var i = 0; i < result.length; i++ ) {
        urlObj = result[i];

        for ( var key in urlObj ) {
          if ( 'loc' != key) continue;

          // TODO: Improve how this key is accessed. Brittle.
          urls.push(urlObj[key][0]);
        }
      }
    });

  });
  return urls;
}

Я запускаю getSitemapURLs из другого файла после запроса метода.Если я console.log( urls ) из закрытия parseString, он возвращает ожидаемое значение, массив URL-адресов.

В настоящее время при вызове этого из индекса возвращается пустой массив.Похоже, это проблема, которую я создал.Может ли кто-нибудь помочь мне правильно определить это, чтобы я мог вернуть массив URL-адресов?

Вот так выглядит мой файл index.js, файл, из которого он вызывается:

// Utility Methods
const getDomainParts = require('./utility/sitemap.js').getDomainParts,
      setSitemap     = require('./utility/sitemap.js').setSitemap,
      getSitemapURLs = require('./utility/sitemap.js').getSitemapURLs;

// Site Vitals
// Actual URL kept out of StackOverflow for privacy
const baseUrl   = 'https://www.xyzurl.com';
const directory = getDomainParts( baseUrl );

// Init Tests

( async () => {

  const sitemap = setSitemap( baseUrl, directory );
  await sitemap;
  const urls    = getSitemapURLs(`./sites/${directory}/sitemap.xml`);

  console.dir( urls );

} )();
...