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