Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 分析后台作业未正确查询所有用户_Javascript_Parse Platform - Fatal编程技术网

Javascript 分析后台作业未正确查询所有用户

Javascript 分析后台作业未正确查询所有用户,javascript,parse-platform,Javascript,Parse Platform,我试图按照Parse的文档/示例在后台作业中运行查询。我要做的是查询数据库中的所有用户s,并在与每个用户关联的matchCenterItems上运行查询 当我运行此作业时,它会记录status.success,但不会经过console.log('即将启动matchCenterItem查询') query.find().then(函数(结果)从不运行,给我的印象是,我要么构造的matchCenterItem查询不正确,要么没有以正确的方式通过每个用户进行查询。为了保持简洁,我只发布了相关的代码片段

我试图按照Parse的文档/示例在后台作业中运行查询。我要做的是查询数据库中的所有
用户
s,并在与每个
用户
关联的
matchCenterItem
s上运行查询

当我运行此作业时,它会记录
status.success
,但不会经过
console.log('即将启动matchCenterItem查询')

query.find().then(函数(结果)
从不运行,给我的印象是,我要么构造的
matchCenterItem
查询不正确,要么没有以正确的方式通过每个
用户进行查询。为了保持简洁,我只发布了相关的代码片段,但如果需要,我很乐意发布后台作业的全部代码

Parse.Cloud.job("MatchCenterBackground", function(request, status) {

    //Parse.Cloud.useMasterKey();

    console.log('background task started');
    //defines which parse class to iterate through


    //Query through all users 
    var usersQuery = new Parse.Query(Parse.User);

    //For every user, do the following:
    usersQuery.each(function(user) {
      //query through all their matchCenterItems
      var matchCenterItem = Parse.Object.extend("matchCenterItem");
      var query = new Parse.Query(matchCenterItem);

      // promise and searchterm arrays to be filled
      var promises = [];
      var searchTerms = [];

      //setting the limit of items at 10 for now
      query.limit(10);

      console.log('about to start the matchCenterItem query');

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

        console.log('matchCenterItem query results:' + results);
        if (results.length > 0){ 

      //code cut off here

好的,这是大量代码和深度嵌套

从我所看到的,你需要回报两个目前还没有被回报的承诺

27: return query.find().then(function(results) {
104: return Parse.Promise.when(promises).then(function(results) {

此外,底部还有两个承诺,它们要么用
then()
链接在一起,要么与
Parse.Promise.when
并行。在这两种情况下,都需要返回结果

232: newMComparisonArray.save({
244: mComparisonQuery.find({

因此,代码的问题只是与正在创建的承诺有关,而不是等待。每当您创建承诺时,您应该考虑是谁在侦听该承诺的完成,并确保该承诺返回给侦听器。

您是否从
函数(用户){}返回了任何内容
?由于这是异步工作,它需要返回一个承诺,以便
each()
知道每项工作何时完成。@chrissaint这是一个很好的观点。我该如何正确地进行这项工作?@chrissaint如果你需要更多的上下文,这是完整的代码:啊,我明白了。你说的“与之并行”是什么意思?
Parse.Promise.when
用于当您有许多承诺,并且希望它们同时开始发生,而不是彼此等待。因此,当您还有两个以上的任务要运行,并且它们不需要一个接一个地发生时,您可以使用
Parse.Promise.when
来实现这一点。这有意义吗在这种情况下,
newMComparisonArray.save
发生在
mComparisonQuery.find
中,而不是像您提到的那样发生在它之后?