Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 服务器端Meteor HTTP.call是否正确使用?_Javascript_Meteor_Rss - Fatal编程技术网

Javascript 服务器端Meteor HTTP.call是否正确使用?

Javascript 服务器端Meteor HTTP.call是否正确使用?,javascript,meteor,rss,Javascript,Meteor,Rss,对不起我的英语。 我是初学者JS开发者。我需要有关流星的帮助。 我尝试编写rss聚合器。 你能告诉我为什么这个代码不能正确地为我工作吗? rssContent总是未定义的。 但是如果我在HTTP.call中尝试console.log(result.content),我会看到rss数据。 我需要将此文件中另一个函数中的rssContent传递给解析XML,但在HTTP.call中遇到了问题 server.js代码: var rssSources = ['http://news.yandex.ru/

对不起我的英语。 我是初学者JS开发者。我需要有关流星的帮助。 我尝试编写rss聚合器。 你能告诉我为什么这个代码不能正确地为我工作吗? rssContent总是未定义的。 但是如果我在HTTP.call中尝试console.log(result.content),我会看到rss数据。 我需要将此文件中另一个函数中的rssContent传递给解析XML,但在HTTP.call中遇到了问题

server.js代码:

var rssSources = ['http://news.yandex.ru/auto.rss'],
parsedRss = [];

var rssContent;

for (var i = 0; i < rssSources.length; i++) {
    HTTP.call('GET', rssSources[i],
        function(error, result) {
            try {
                rssContent = result.content;
            } catch (e) {
                console.log(e);
            }
        }
    );
}

console.log(rssContent);
var rssSources=[]http://news.yandex.ru/auto.rss'],
parsedRss=[];
var-rsscont;
对于(变量i=0;i
在Meteor中运行HTTP请求有两种方法。默认情况下,它同步运行。如果传递回调,它将异步运行。在本例中,假设这是服务器端代码,则更容易忽略回调并将其视为同步的(更不用说了)

var rssContent=[];
对于(变量i=0;i

我不熟悉同步版本的错误处理。您可以使用head。

您的
rssContent
变量始终未定义,因为您在回调(异步)非阻塞方法中调用它。您必须使用同步(阻塞)方法,而不是回调方法。 我建议您,不要给全局变量赋值,只要收到http请求的响应,就直接将数据插入数据库

阻止示例:-

var rssSources = ['http://news.yandex.ru/auto.rss'],
parsedRss = [];
var rssContent = "";
for (var i = 0; i < rssSources.length; i++) {
  var result = Meteor.http.call("GET", rssSources[i]);
  if(result.statusCode == '200' && result.content){
     rssContent += result.content;
  }
}
console.log(rssContent);
var rssSources = ['http://news.yandex.ru/auto.rss'],

for (var i = 0; i < rssSources.length; i++) {
    HTTP.call('GET', rssSources[i],
        function(error, result) {
            try {
                //HERE INSERT YOUR DATA INTO THE DATABASE.INSTEAD OF ASSIGNING THE VALUE TO GLOBAL VARIABLE.
            } catch (e) {
                console.log(e);
            }
        }
    );
var rssSources=[]http://news.yandex.ru/auto.rss'],
parsedRss=[];
var rssContent=“”;
对于(变量i=0;i
非阻塞示例:-

var rssSources = ['http://news.yandex.ru/auto.rss'],
parsedRss = [];
var rssContent = "";
for (var i = 0; i < rssSources.length; i++) {
  var result = Meteor.http.call("GET", rssSources[i]);
  if(result.statusCode == '200' && result.content){
     rssContent += result.content;
  }
}
console.log(rssContent);
var rssSources = ['http://news.yandex.ru/auto.rss'],

for (var i = 0; i < rssSources.length; i++) {
    HTTP.call('GET', rssSources[i],
        function(error, result) {
            try {
                //HERE INSERT YOUR DATA INTO THE DATABASE.INSTEAD OF ASSIGNING THE VALUE TO GLOBAL VARIABLE.
            } catch (e) {
                console.log(e);
            }
        }
    );
var rssSources=[]http://news.yandex.ru/auto.rss'],
对于(变量i=0;i

}

您是在回调方法中调用它吗?不是。我需要从rss源获取数据,解析它并将其放到服务器端的Mongo。在下面的示例中,我的意思是您正在将数据分配到回调(异步)方法,即非阻塞方法。谢谢。我想到了同步方法。我在异步开发方面的经验很少,但是如果我有大量的rss源呢?如果使用同步请求,服务器在处理整个阵列之前可能会很长时间处于忙碌状态?可能还需要使用异步模式?还是我错了?我理解这个想法。非常感谢。