如何获取“ urls”变量以正确更新?

时间:2018-12-27 21:07:52

标签: javascript node.js asynchronous scope async-await

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 );

} )();

0 个答案:

没有答案