我正在制作一个新闻阅读器应用程序,并使用 Parse.com 后台作业从报纸的 RSS 提要中收集链接。我使用 xmlreader.js 和 sax.js 来解析 httpResponse 并使用 saveAll 和 beforeSave,定期更新数据浏览器中的类。
我有多个类别的多份报纸,总共超过 30 对,(我以后必须包括更多对,因为我想包括区域性报纸)。到现在为止,我一直在处理一份报纸和一个类别——印度教、体育类别;现在工作正常。我认为复制这两个功能并创造就业机会效率不高。
因此,我想问问我是否可以将这些作业和 beforeSave 都转换成某种函数,这样我就可以传入报纸类别对类名或其 url 来自动执行这些操作。
完整代码 - main.js
工作-
Parse.Cloud.job("job_hindu_sports", function (request, response) {
return Parse.Cloud.httpRequest({
url: 'http://www.thehindu.com/sport/?service=rss'
}).then(function(httpResponse) {
var someXml = httpResponse.text;
xmlreader.read(someXml, function (err, res){
if(err) {
response.error("Error " +err);
return console.log(err);
}
var listArray = [];
res.rss.channel.item.each(function (i, item){
var hinduSports = new HinduSports(); //@startswithaj - this part
hinduSports.set("link", item.link.text());
hinduSports.set("title", item.title.text());
hinduSports.set("pubDate", item.pubDate.text());
//console.log("pubDate - "+ item.pubDate.text());
listArray.push(hinduSports);
});
var promises = [];
Parse.Object.saveAll(listArray, {
success: function(objs) {
promises.push(objs);
console.log("SAVED ALL!");
},
error: function(error) {
console.log("ERROR WHILE SAVING - "+error);
}
});
return Parse.Promise.when(promises);
});
}).then(function() {
response.success("Saving completed successfully.");
},function(error) {
response.error("Uh oh, something went wrong.");
});
});
保存前 -
Parse.Cloud.beforeSave("HinduSports", function(request, response) {
//console.log("in beforeSave");
var query = new Parse.Query(HinduSports);
var linkText = request.object.get("link")
var titleText = request.object.get("title");
query.equalTo("link", linkText);
query.first({
success: function(object) {
//console.log("in query");
if (object) {
//console.log("found");
if(object.get('title')!==titleText){
console.log("title not same");
object.set("title", titleText);
response.success();
}
else{
console.log("title same");
response.error();
}
} else {
console.log("not found");
response.success();
}
},
error: function(error) {
response.error();
}
});
});
最佳答案
在您的工作代码中,您可以在数据存储中查询要处理的所有 URL,然后遍历请求每个 URL 的结果并将 httpresponse 传递给完成所有工作的函数
所以你会有(伪代码)
function getDataForNewspaper(id, url){
return (function(id) {
Parse.Cloud.httpRequest({
url: url
}).then(function(httpResponse){
processDataForNewspaper(id, httpResponse)
})
})(id) //you need to have this in a closure so you can pass id to processDataFor...
function processDataforNewpaper(id, httpResponse){
someXml = httpResponse.text
//process your xml here
}
Parse.Cloud.job("get_data_for_all_newspapers", function (request, response) {
var query = new Parse.Query("Get all the newspapers").find{
success: function(list){
for each newspaper in list then
getDataForNewspaper(newspaper.id, newspaper.url)
}
}
}
这不是最好的解释,但我希望这有帮助
关于javascript - 如何将后台作业转换为函数之类的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23309519/