Я выполняю задание, которое делает следующее
- httpЗапрос
- processing
- httpRequest to different server using some of the processed data
- more processing, extending a Parse.Object model and then
- saveAll
В какой-то момент я делал только один httpRequest, который делал saveAll, и это работало.
После того, как я добавил второй httpRequest, saveAll перестал работать
Я читал некоторые анекдотические вещи о «2 запросах/httpRequests для задания/функции», а затем я читал некоторые другие анекдотические вещи о промисах и некоторые анекдотические вещи о цепочке обещаний, но на данный момент я потерян
поэтому я переписал это задание, чтобы использовать обещания, но я все еще получаю сообщение об ошибке в методе saveAll
Parse.Cloud.job("myJob", function(request, status) {
Parse.Cloud.httpRequest({
method: "GET",
url: "https://api.website.com/api/method",
headers: {
"Content-Type": "application/json"
}
}).then(function(httpResponse)
/*,success: function(httpResponse)*/
{
var symbols = httpResponse.data["symbols"];
var tickerNames = new Array();
symbols.forEach(function(obj) {
tickerNames.push(obj.symbol);
//maybe do a before save method to check if it already exists
});
return tickerNames;
}).then(function(tickerNames) {
return Parse.Cloud.httpRequest({
method: "GET",
url: "https://api.secondsite.org/api/" + tickerNames.join(","),
headers: {
"Authorization": "Bearer ACCESSTOKEN",
"Accept": "application/json"
}
/*,
success: function(httpResponse) {*/
}).then(function(httpResponse) {
var serverObjects = new Array();
var objectArray = httpResponse.data["quotes"]["quote"];
objectArray.forEach(function(obj) {
var SocialPicks = Parse.Object.extend("SocialPicks");
var newPick = new SocialPicks();
newPick.set("symbol", obj.symbol);
newPick.set("title", obj.description);
newPick.set("changePercent", obj.change_percentage);
newPick.set("volume", obj.volume);
newPick.set("avgVolume", obj.average_volume);
//newPick.save();
serverObjects.push(newPick);
});
//console.log(serverObjects[0].symbol);
var promise = Parse.Promise.as();
promise = promise.then(function(){
return Parse.Object.saveAll(serverObjects)
.then(function(list) {
console.log("saveAll success");
status.success("success");
}, function(error) {
console.log("saveAll error");
status.error("not successful saving");
});
})
return promise;
},
/*error: function(error) {*/
function(httpResponse) {
console.log("ERROR");
status.error("not successful network call");
}
);
});
});
это всегда терпит неудачу с status.error("not successful saving");
, использую ли я промисы или последовательную версию этого метода без промисов
на данный момент я не уверен, что я наткнулся на ограничение синтаксического анализа, или я неправильно использую промисы, или и то, и другое
поэтому, если у кого-то есть опыт выполнения последующих httpRequests в облачном коде, а затем написания объектов, понимание было бы полезно
}).then(function(tickerNames) { Parse.Cloud.httpRequest({
здесь не хватаетreturn
. - person Benjamin Gruenbaum   schedule 19.05.2015.then(function(tickerNames) { return Parse.Cloud.httpRequest({
та же ошибкаnot successful saving
- person CQM   schedule 19.05.2015.then(function(tickerNames)
, похоже, не привязан к обещанию. Я что-то упускаю? - person Dave Alperovich   schedule 28.05.2015