Javascript 等待查询完成,然后发送响应

Javascript 等待查询完成,然后发送响应,javascript,parse-platform,Javascript,Parse Platform,我正在使用云代码在服务器端执行一些东西。在我的代码中,我必须执行一系列查询,这些查询应该在while循环中执行。这些查询应该一个接一个地进行。当我运行代码时,它进入每个查询并在完成查询之前返回,因此会出现套接字超时连接错误。有没有办法在继续之前等待查询完成?任何例子都将受到高度赞赏。多谢各位 编辑:下面是一段代码片段 while (i < cities.length-1){ if (query) { query = false;

我正在使用云代码在服务器端执行一些东西。在我的代码中,我必须执行一系列查询,这些查询应该在while循环中执行。这些查询应该一个接一个地进行。当我运行代码时,它进入每个查询并在完成查询之前返回,因此会出现套接字超时连接错误。有没有办法在继续之前等待查询完成?任何例子都将受到高度赞赏。多谢各位

编辑:下面是一段代码片段

while (i < cities.length-1){
            if (query) {
                query = false;
                cities.forEach(function(object){
                    var query = new Parse.Query("pictures");
                    query.descending("likes");
                    query.equalTo("city", object);
                    query.limit(1);
                    query.find().then(function(results){
                        success: function(results) {
                            var tempArray = new Array();
                            tempArray = results;

                            rankedPosts = rankedPosts.concat(tempArray);

                            query = true;
                            i++;
                        }, error: function() {
                            response.error("Error");
                        }
                    });
                });
            };
        }
while(i
我认为你需要制作一个承诺系列

这样做:

  // Create a trivial resolved promise as a base case.
  var promise = Parse.Promise.as();

  var finalResults = [];

  // for all the objects in the array...
  _.each(cities, function(objectX) { // the "_" is given by using "var _ = require('underscore');" at the beginning of your module

       // For each item, extend the promise with a function to query specified objectX
       promise = promise.then(function() {

           var subPromise = new Parse.Promise();

           var query = new Parse.Query("pictures");
           query.descending("likes");
           query.equalTo("city", objectX);
           query.limit(1);

           query.find().then(function(results) {

               // append cur results to final results
               finalResults = _.union (finalResults,results);
               subPromise.resolve(results);

           }, function(error) {

               subPromise.reject(error);

           });

           return subPromise;
       });

  });
  return promise;

}).then(function() {

  // When all queries have been performed

});
我没有测试过这段代码,但我已经成功地使用了类似的东西

无论如何,请记住Parse.com对请求持续时间的限制。 因此,在事件侦听器中为3秒(如beforeSave或afterSave),在 自定义功能,后台作业最多15分钟


希望对你有所帮助

我认为你需要制作一个承诺系列

这样做:

  // Create a trivial resolved promise as a base case.
  var promise = Parse.Promise.as();

  var finalResults = [];

  // for all the objects in the array...
  _.each(cities, function(objectX) { // the "_" is given by using "var _ = require('underscore');" at the beginning of your module

       // For each item, extend the promise with a function to query specified objectX
       promise = promise.then(function() {

           var subPromise = new Parse.Promise();

           var query = new Parse.Query("pictures");
           query.descending("likes");
           query.equalTo("city", objectX);
           query.limit(1);

           query.find().then(function(results) {

               // append cur results to final results
               finalResults = _.union (finalResults,results);
               subPromise.resolve(results);

           }, function(error) {

               subPromise.reject(error);

           });

           return subPromise;
       });

  });
  return promise;

}).then(function() {

  // When all queries have been performed

});
我没有测试过这段代码,但我已经成功地使用了类似的东西

无论如何,请记住Parse.com对请求持续时间的限制。 因此,在事件侦听器中为3秒(如beforeSave或afterSave),在 自定义功能,后台作业最多15分钟


希望对你有所帮助

我认为你需要制作一个承诺系列

这样做:

  // Create a trivial resolved promise as a base case.
  var promise = Parse.Promise.as();

  var finalResults = [];

  // for all the objects in the array...
  _.each(cities, function(objectX) { // the "_" is given by using "var _ = require('underscore');" at the beginning of your module

       // For each item, extend the promise with a function to query specified objectX
       promise = promise.then(function() {

           var subPromise = new Parse.Promise();

           var query = new Parse.Query("pictures");
           query.descending("likes");
           query.equalTo("city", objectX);
           query.limit(1);

           query.find().then(function(results) {

               // append cur results to final results
               finalResults = _.union (finalResults,results);
               subPromise.resolve(results);

           }, function(error) {

               subPromise.reject(error);

           });

           return subPromise;
       });

  });
  return promise;

}).then(function() {

  // When all queries have been performed

});
我没有测试过这段代码,但我已经成功地使用了类似的东西

无论如何,请记住Parse.com对请求持续时间的限制。 因此,在事件侦听器中为3秒(如beforeSave或afterSave),在 自定义功能,后台作业最多15分钟


希望对你有所帮助

我认为你需要制作一个承诺系列

这样做:

  // Create a trivial resolved promise as a base case.
  var promise = Parse.Promise.as();

  var finalResults = [];

  // for all the objects in the array...
  _.each(cities, function(objectX) { // the "_" is given by using "var _ = require('underscore');" at the beginning of your module

       // For each item, extend the promise with a function to query specified objectX
       promise = promise.then(function() {

           var subPromise = new Parse.Promise();

           var query = new Parse.Query("pictures");
           query.descending("likes");
           query.equalTo("city", objectX);
           query.limit(1);

           query.find().then(function(results) {

               // append cur results to final results
               finalResults = _.union (finalResults,results);
               subPromise.resolve(results);

           }, function(error) {

               subPromise.reject(error);

           });

           return subPromise;
       });

  });
  return promise;

}).then(function() {

  // When all queries have been performed

});
我没有测试过这段代码,但我已经成功地使用了类似的东西

无论如何,请记住Parse.com对请求持续时间的限制。 因此,在事件侦听器中为3秒(如beforeSave或afterSave),在 自定义功能,后台作业最多15分钟


希望它有帮助

看起来您实际上可以在并行查询(而不是串行查询)中完成这项工作。我解决了一个类似的问题,我必须返回一个布尔结果数组。如果请求数组中存在具有一个电话号码的用户,则必须返回true/false

灵感来自:

Parse.Cloud.define(“电话搜索”),函数(请求、响应){
var list=request.params.phones;
//初始化结果数组
var finalResults=[];
对于(变量i=0;i0){
控制台日志(“找到一个:+编号);
最终结果[j]=真;
}
},
错误:函数(){
response.error();
}
})        
);
})(i) );
}
//返回一个新的承诺,该承诺在所有查询完成时得到解决。
返回Parse.Promise.when(承诺);
}).然后(函数(){
控制台日志(最终结果);
回答:成功(最终结果);
});
});

看起来您实际上可以在并行查询(而不是串行查询)中完成这项工作。我解决了一个类似的问题,我必须返回一个布尔结果数组。如果请求数组中存在具有一个电话号码的用户,则必须返回true/false

灵感来自:

Parse.Cloud.define(“电话搜索”),函数(请求、响应){
var list=request.params.phones;
//初始化结果数组
var finalResults=[];
对于(变量i=0;i0){
控制台日志(“找到一个:+编号);
最终结果[j]=真;
}
},
错误:函数(){
响应.错误