我正在经营一项执行以下工作的工作
有一次,我只做了一个执行saveAll的httpRequest并且它有效。
添加第二个httpRequest后,saveAll停止工作
我已经阅读了一些关于“每个工作/功能的2个查询/ httpRequests”的轶事,然后我读了一些关于Promises的其他轶事,以及关于链接承诺的一些轶事,但此时我迷失了
所以我已经重写了这个作业以使用Promises但是我仍然在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");
,无论我是否使用promises或此方法的顺序版本而没有承诺
此时我不确定我是否达到了解析限制,或者我是否使用了错误的承诺,或者两者都没有,或者其他
所以,如果有人有经验在Cloud Code中执行后续的httpRequests然后编写对象,那么洞察力会很有帮助
答案 0 :(得分:1)
对于它的价值,这里是我对代码的简化。
我做了三个主要的mod:
array.map()
来构建tickerNames
和serverObjects
。serverObjects
/ saveall()
例程,将其置于外部承诺链中。Parse.Promise.as()
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) {
var tickerNames = httpResponse.data.symbols.map(function(obj) {
return obj.symbol;
//maybe do a before save method to check if it already exists
});
return Parse.Cloud.httpRequest({
method: 'GET',
url: 'https://api.secondsite.org/api/' + tickerNames.join(),
headers: {
'Authorization': 'Bearer ACCESSTOKEN',
'Accept': 'application/json'
}
});
}).then(function(httpResponse) {
var serverObjects = httpResponse.data.quotes.quote.map(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);
return newPick;
});
return Parse.Object.saveAll(serverObjects).then(function(list) {
console.log('saveAll success');
status.success('success');
}, function(error) {
console.log('saveAll error: ' + error.message);
status.error('not successful saving');
});
}, function(httpResponse) {
console.log('ERROR: ' + error.message);
status.error('not successful network call');
});
});
请注意,这并不能解决报告的错误,我们现在知道这些错误位于其他地方,但在其他方面可能会有所帮助。
答案 1 :(得分:0)
原因是由于其中一个API服务器出现类型错误而导致错误。
它提供了一个int,我的模型正在寻找该变量的字符串
在离开问题一段时间后,我意识到我没有打印出该方法试图告诉我的实际错误。打印出来,在控制台中看到问题,解决了问题。
“erot demonstratum”