という名前のクラスをループするクラウド関数がありますdrives
。このクラスの各要素には、 という名前のクラスへのポインタを持つ配列がありますdriveResults
。
次のようにドライブを取得するクラウド ジョブを作成しました。
まず、1 回の呼び出しで 1000 個以上のアイテムをフェッチできるように、fetchPaginated という関数を作成しました。
Parse.Collection.prototype.fetchPaginated = function(callbacks){
var promise = new Parse.Promise();
var result = [];
var thisCol = this;
var processCallback = function(res) {
result = result.concat(res);
if (res.length === thisCol.query._limit) {
process(res[res.length-1].id);
}else{
thisCol.reset(result);
delete thisCol.query._where.objectId;
if(callbacks && callbacks.success)
callbacks.success();
promise.resolve(true);
}
}
var process = function(skip) {
if (skip) {
thisCol.query.greaterThan("objectId", skip);
}
thisCol.query.ascending("objectId");
thisCol.query.find().then(function querySuccess(res) {
processCallback(res);
}, function queryFailed(reason) {
if(callbacks && callbacks.error)
callbacks.error(thisCol, reason);
promise.reject("query unsuccessful, length of result " + result.length + ", error:" + reason.code + " " + reason.message);
});
}
process(false);
return promise;
};
次に、ドライブのモデル、クエリ、およびコレクションを作成します。
// ---------------------------------------------------------------------------------- Drives
// --------------------------------------------------- MODEL
var DrivesModel = Parse.Object.extend({
className: "Drives",
});
exports.DrivesModel = DrivesModel;
// --------------------------------------------------- QUERY
var DrivesQuery = new Parse.Query(DrivesModel);
exports.DrivesQuery = DrivesQuery;
DrivesQuery.limit(1000);
DrivesQuery.addAscending('date');
DrivesQuery.include('driveResults');
DrivesQuery.find({
success: function(results) {
// results is an array of Parse.Object.
},
error: function(error) {
// error is an instance of Parse.Error.
}
});
// --------------------------------------------------- COLLECTION
var DrivesCollection = Parse.Collection.extend({
model: DrivesModel,
query: DrivesQuery,
});
exports.DrivesCollection = DrivesCollection;
var drivesCollection = new DrivesCollection();
exports.drivesCollection = drivesCollection;
次に、promise 内のクラウド関数には、次のようなものがあります。
// some initializing code here...
return iEVCollections.drivesCollection.fetchPaginated();
}).then(function(){
// at this point, all drives have been fetched.
// some code here.
ご覧のとおり、DrivesQuery には driveResults が含まれています。
問題は次のとおりです。配列 driveResuls には が含まれていますnull
。コンソールに出力すると、これは配列の一部です。
[null,{"A Valid":"Object"},null,null,{"A Valid":"Object"},null,{"A Valid":"Object"},{"A Valid":"Object"},null,,null,null,{"A Valid":"Object"}]
データ ブラウザーでは、この配列の中に null がまったく含まれていないことがわかります。バックボーン アプリで同じことを行うと、有効な整数のみが含まれます。では、なぜ私のクラウド関数にこの要素が欠けているのでしょうか?
ご協力いただきありがとうございます。