Javascript ParseApp从httpRequest保存数据

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:

我正在编写一个简单的应用程序,需要从http get api调用中获取数据,并将其存储在Parse中,因为某些原因,并不是所有的数据都被存储。此外,http调用在保存此处的所有数据之前返回代码

如何使其仅在保存所有数据后返回

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]
或类似的内容。这是一个数据完整性问题,与您的实际问题无关。请使用调试器逐行检查并找到有问题的行。您还提到//不要使用
迭代数组以。。。在循环中
出现这种情况的原因是什么?是的,正如您提到的,数据有问题,所以我修复了它,现在它工作正常。