2016-04-14 14 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); 
    } 
}); 
}); 

私は電話を紛失していますか?解析クラウドコードは、それがバックグラウンドジョブであるとして、あなたはthisの例のようにstatus.error()またはstatus.success()を呼び出す必要があり

答えて

0

「成功/エラーが呼び出されなかった」と言っています。

コード内の問題点は、実際にはどこでもstatus.success()を呼び出していないことです。機能が終了したら、常にstatus.error()またはstatus.success()に電話する必要があります。ループごとにParse Queryを呼び出すと、少し複雑になり(多くのリクエスタを作ることができます)、weekQuery.countが完了するのを待っていません。また、カウントを使用するのは一般にnot recommendedです。

promisesがどのように機能し、すべての処理が完了したときにクエリを待ってエラー/成功を呼び出すかを知る必要があります。クエリが終了する前に成功/エラーを呼び出すと、中止されます。

多分、データベースに独自の計数ロジックを実装するか、weekObjが結果のどれかと等しい場合はすべてのオブジェクトを検索し、検索したオブジェクトごとに "weekObj"フィールドを取得して結果のどれかを知ることができますそれと等しい。しかしfindは、デフォルトで最大100個のオブジェクトと最大1000個のオブジェクトを返すことに注意してください(まだParse.comを使用していて、Parse Serverはまだ使用していない場合)。

weekQuery.equalTo("weekObj", results); 
weekQuery.find(); 
関連する問題