javascript - 为什么模块导出变量为空?

标签 javascript node.js arraylist rss

我是 Nodejs 新手。

这是我的 .js 文件。我正在尝试将 audioData 变量公开给其他函数。 audioData 变量值在函数外部为空。当我在函数内部打印时,我看到了该值。可能出什么问题了?

'use strict';
var asyncrequest = require('request');
var xml2js = require('xml2js');
var parseString = xml2js.parseString;
var audioData = [];

asyncrequest("http://example.com/feed", function(error, responsemeta, body) {

    parseString(body, function(err, result){
            var stories = result['rss']['channel'][0]['item'];

            console.log("Total stories: " + stories.length);

            stories.forEach(function(entry) {
                var singleObj = {}
                singleObj['title'] = entry['title'][0];
                singleObj['value'] = entry['enclosure'][0].$.url;
                audioData.push(singleObj);
            });
    });
    console.dir(audioData);
});

module.exports = audioData;
console.log("Program ended");

最佳答案

您必须返回audioData 的 promise ,而不是audioData 本身!您可以在其他地方了解有关 promise 的更多信息。令人高兴的是,有一个请求的 promise 版本,请求 promise ,您可以像这样使用:

'use strict';

var rp = require('request-promise');
var xml2js = require('xml2js');
var parseString = xml2js.parseString;
var audioData = [];

var promiseForAudioData = rp('http://example.com/feed')
  .then(body => {
    parseString(body, function(err, result){
      var stories = result['rss']['channel'][0]['item'];
      console.log("Total stories: " + stories.length);

      stories.forEach(function(entry) {
        var singleObj = {}
        singleObj['title'] = entry['title'][0];
        singleObj['value'] = entry['enclosure'][0].$.url;
        audioData.push(singleObj);
      });
    });

    return audioData;
  })
  .catch(console.error.bind(console));

module.exports = promiseForAudioData;
console.log("Program ended");

关于javascript - 为什么模块导出变量为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45578833/

相关文章:

javascript - Cypress 覆盖 Docker 容器中的 baseUrl 不起作用

javascript - 如何实现类似lodash的对象浅比较?

node.js - 503 "Service Unavailable"安装 iisnode 后所有应用程序均出现错误

java - 重新排列 ArrayList 的顺序

java - Android-将对象的 Intent 从一个 Activity 传递到另一个 Activity (崩溃)

javascript - 如何在 jQuery 中模拟点击?

javascript - 为什么 vue.js 组件在第一次尝试时不显示获取的数据?

node.js - fs.open 失败,文件扩展名 - node.js

node.js - API设计——分成不同的子域(微服务)

java - 使用 String[] 时出现 ClassCastException