2016-04-14 3 views
-1

Я новичок в javascript, но я не совсем уверен, как мне не хватает вызова «Успех/ошибка», я просмотрел его, и все выглядит так, как мне звонили.Успех/ошибка не вызвана

Parse.Cloud.job("UpdateWeekData", function(request, response) { 
var weeks = []; 
var weekCount = 0; 
var weekQuery = new Parse.Query("WeekList"); 

weekQuery.find({ 
    success: function(results) { 
     for (week in results) { 
      var weekCount = Parse.Query("Schedule"); 
      weekQuery.equalTo("weekObj", week); 
      weekQuery.count({ 
       success:function(count) { 
        var max = week.get("maxAppts"); 
        week.set("apptsRemain", (max - count)); 
        week.set("numApptsSch", count); 
        week.save(); 
       }, 
       error: function(error) { 
        response.error(error.message); 
       } 
      }); 
     } 
    } , 
    error: function(error) { 
     response.error(error.message); 
    } 
}); 
}); 

Любая идея, когда мне не хватает звонка? Parse Cloud Code говорит, что «успех/ошибка не была вызвана»

ответ

0

Как фоновая работа, вы должны позвонить status.error() или status.success(), как в примере this.

Проблема в вашем коде заключается в том, что вы на самом деле не звоните status.success() в любом месте. Вы всегда должны позвонить status.error() или status.success(), когда ваша функция будет завершена. Вызов Parse Query in для каждого цикла делает его немного сложным (и он может сделать много запросов!), Что вы не дождались завершения weekQuery.count. Также используется счетчик, как правило, not recommended.

Вы также должны узнать, как работает promises, чтобы вы знали, как ждать запросов и вызывать ошибку/успех, когда все будет сделано - если вы вызываете успех/ошибку до завершения запроса, он будет прерван.

Возможно, вам нужно реализовать свою собственную логику подсчета в базе данных или вы можете сделать запрос, когда weekObj соответствует любому из результатов, найти все объекты, а затем для каждого извлеченного объекта вы можете получить поле «weekObj», чтобы узнать, какой из результатов он равен. Но помните, что find возвращает 100 объектов по умолчанию и не более 1000 объектов (если вы используете parse.com, а не Parse Server еще):

weekQuery.equalTo("weekObj", results); 
weekQuery.find(); 
Смежные вопросы