Итак, я хочу получить большой объем данных в Parse, хорошим решением, которое я нашел, является создание рекурсивной функции: когда данные будут успешно найдены, запустите другой запрос. То, как я это делаю, довольно просто:
var containedLimit = 1000, // Also tried with 500, 300, and 100
parseUsersWaiting = {
// A lot of Users
},
parseUsers = {}, // Recipt for Users
getPlayers = function (containedIn) {
var count = 0;
if (containedIn == undefined) {
containedIn = [];
for (var i in parseUsersWaiting) {
count++;
if (count > containedLimit) {
break;
}
containedIn.push(parseUsersWaiting[i].id);
delete parseUsersWaiting[i];
}
}
var UserObject = Parse.Object.extend('User'),
UserQuery = new Parse.Query(UserObject);
UserQuery.limit(containedLimit);
UserQuery.containedIn('objectId', containedIn);
UserQuery.find({
success: function (results) {
if (results) {
for (var i in results) {
if (parseUsers[results[i].id] == undefined) {
parseUsers[results[i].id] = results[i];
}
// Other stuff
if (results.length < containedLimit) {
// End of process
} else {
getPlayers();
}
}
} else {
// Looks like an end of process too
}
}, error: function (error) {
console.log(error.message);
getPlayers(containedIn);
}
});
};
Теперь вот что я хотел бы назвать "проблемой": часто случается, что обратный вызов "error" запускается с этим:
Received an error with invalid JSON from Parse: Error: getaddrinfo ENOTFOUND api.parse.com
at errnoException (dns.js:44:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:94:26)
(С кодом 107, конечно) Итак, я искал в Parse Documentation, и он говорит то же самое: "Получил ошибку с недопустимым JSON". Да.
Я использую Parse SDK, предоставленный Parse.com(npm install parse
)
Я также попытался немного изменить код Parse с заменой ключа host
на "имя хоста" в строке 361 файла parse/node_modules/xmlhttprequest/lib/XMLHttpRequest.js
(версия пакета анализа: 1.5.0), и он не сработал, поэтому я удалил свои изменения.
(Кстати, я нашел решение, говорящее об использовании ulimit
, чтобы изменить ограничение использования памяти, которое могло бы решить проблему, но на самом деле у меня нет необходимых прав для выполнения этой команды)