Javascript ParseApp从httpRequest保存数据
我正在编写一个简单的应用程序,需要从http get api调用中获取数据,并将其存储在Parse中,因为某些原因,并不是所有的数据都被存储。此外,http调用在保存此处的所有数据之前返回代码 如何使其仅在保存所有数据后返回Javascript ParseApp从httpRequest保存数据,javascript,parse-platform,promise,Javascript,Parse Platform,Promise,我正在编写一个简单的应用程序,需要从http get api调用中获取数据,并将其存储在Parse中,因为某些原因,并不是所有的数据都被存储。此外,http调用在保存此处的所有数据之前返回代码 如何使其仅在保存所有数据后返回 Parse.Cloud.httpRequest({ url: 'http://api.rottentomatoes.com/api/public/v1.0/lists/movies/upcoming.json?apikey=apikey', success:
Parse.Cloud.httpRequest({
url: 'http://api.rottentomatoes.com/api/public/v1.0/lists/movies/upcoming.json?apikey=apikey',
success: function(httpResponse) {
var jsonobj = JSON.parse(httpResponse.text);
var total = jsonobj.movies.length;
for ( var idx in jsonobj.movies) {
var movie = new Movie();
movie.save(new Movie(jsonobj.movies[idx])).then(
function(object){
console.log(object)
},
function(error){
console.log(error);
}
)
}
response.send("All saved");
},
error: function(httpResponse) {
console.error('Request failed with response code ' + httpResponse.status);
response.send("Failed");
}
})
您需要通过聚合函数聚合您使用的所有承诺,在解析承诺的情况下,它是
Parse.Cloud.httpRequest({
url: 'http://api.rottentomatoes.com/api/public/v1.0/lists/movies/upcoming.json?apikey=apikey',
success: function(httpResponse) {
var jsonobj = JSON.parse(httpResponse.text);
var total = jsonobj.movies.length;
var results = [];
// do NOT iterate arrays with `for... in loops`
for(var i = 0; i < jsonobj.movies.length; i++){
var movie = new Movie();
results.push(movie.save(new Movie(jsonobj.movies[i]))); // add to aggregate
}
// .when waits for all promises
Parse.Promise.when(promises).then(function(data){
response.send("All saved");
});
},
error: function(httpResponse) {
console.error('Request failed with response code ' + httpResponse.status);
response.send("Failed");
}
})
Parse.Cloud.httpRequest({
网址:'http://api.rottentomatoes.com/api/public/v1.0/lists/movies/upcoming.json?apikey=apikey',
成功:函数(httpResponse){
var jsonobj=JSON.parse(httpResponse.text);
var total=jsonobj.movies.length;
var结果=[];
//不要在循环中使用“for…”迭代数组`
for(var i=0;i
虽然,对httpRequest也使用承诺可能更好,但这应该会起作用。我收到了这个错误{“code”:111,“message”:“key runtime的类型无效,预期的数字,但得到了字符串”}我还检查了文档中的并行承诺。这个错误与承诺无关,您的解析对象定义得不好,如果要在需要数字的地方传递字符串,请尝试传递+jsonobj.movies[i]
或类似的内容。这是一个数据完整性问题,与您的实际问题无关。请使用调试器逐行检查并找到有问题的行。您还提到//不要使用迭代数组以。。。在循环中
出现这种情况的原因是什么?是的,正如您提到的,数据有问题,所以我修复了它,现在它工作正常。