两次 httpRequest 后解析、saveAll 失败(Cloud Code 作业)
Parse, saveAll failing after two httpRequests (Cloud Code job)
我是运行从事以下工作
- http请求
- 处理中
- httpRequest 到不同的服务器使用一些处理过的数据
- 更多处理,扩展 Parse.Object 模型,然后
- 全部保存
有一次我只执行了一个执行 saveAll 并且有效的 httpRequest。
添加第二个 httpRequest 后,saveAll 停止工作
我读过一些关于“每个 job/function 的 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");
}
);
});
});
无论我使用 promises 还是不使用 promises
的此方法的顺序版本,这总是因 status.error("not successful saving");
而失败
此时我不确定我是否遇到了解析限制,或者我是否错误地使用了 promises,或者两者兼而有之,或者其他
因此,如果任何人有在 Cloud Code 中执行后续 httpRequests 然后编写对象的经验,洞察力将会有所帮助
为了它的价值,这是我对代码的简化。
我完成了三个主要模组:
- 在两个地方使用了
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');
});
});
请注意,这并不能解决所报告的错误,我们现在知道它存在于其他地方,但可能在其他方面有所帮助。
原来这是由于 API 服务器之一的类型错误导致的错误。
它提供了一个整数,而我的模型正在寻找该变量的字符串
在离开这个问题一段时间后,我意识到我并没有打印出该方法试图告诉我的实际错误。打印出来,在控制台看到问题,解决了问题。
引述色情示范
我是运行从事以下工作
- http请求
- 处理中
- httpRequest 到不同的服务器使用一些处理过的数据
- 更多处理,扩展 Parse.Object 模型,然后
- 全部保存
有一次我只执行了一个执行 saveAll 并且有效的 httpRequest。
添加第二个 httpRequest 后,saveAll 停止工作
我读过一些关于“每个 job/function 的 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");
}
);
});
});
无论我使用 promises 还是不使用 promises
的此方法的顺序版本,这总是因status.error("not successful saving");
而失败
此时我不确定我是否遇到了解析限制,或者我是否错误地使用了 promises,或者两者兼而有之,或者其他
因此,如果任何人有在 Cloud Code 中执行后续 httpRequests 然后编写对象的经验,洞察力将会有所帮助
为了它的价值,这是我对代码的简化。
我完成了三个主要模组:
- 在两个地方使用了
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');
});
});
请注意,这并不能解决所报告的错误,我们现在知道它存在于其他地方,但可能在其他方面有所帮助。
原来这是由于 API 服务器之一的类型错误导致的错误。
它提供了一个整数,而我的模型正在寻找该变量的字符串
在离开这个问题一段时间后,我意识到我并没有打印出该方法试图告诉我的实际错误。打印出来,在控制台看到问题,解决了问题。
引述色情示范