gpt4 book ai didi

javascript - 服务器端的 Meteor HTTP.call 正确使用吗?

转载 作者:行者123 更新时间:2023-12-03 11:39:43 25 4
gpt4 key购买 nike

抱歉我的英语不好。我是初级 JS 开发人员。我需要有关 Meteor 的帮助。我尝试编写 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);

最佳答案

您的 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);
}
}
);

}

关于javascript - 服务器端的 Meteor HTTP.call 正确使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26335026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com