Успех / Ошибка не вызывается

Я новичок в 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 говорит "успех / ошибка не была вызвана"

1 ответ

Решение

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

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

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

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

weekQuery.equalTo("weekObj", results);
weekQuery.find();
Другие вопросы по тегам