Edw*_*yot 10 javascript json node.js express parse-platform
所以我想在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);
}
});
};
Run Code Online (Sandbox Code Playgroud)
现在,我想称之为"问题":非常频繁地发生"错误"回调与此一起启动:
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)
Run Code Online (Sandbox Code Playgroud)
(当然,使用代码107)所以我搜索了Parse文档,它说的完全相同:"收到了无效JSON的错误".是啊.
我正在使用Parse.com提供的Parse SDK(npm install parse)
我还尝试修改Parse代码host,在文件的第361行parse/node_modules/xmlhttprequest/lib/XMLHttpRequest.js(Parse包版本:1.5.0)上用'hostname' 替换密钥,但它没有用,所以我删除了我的更改.
(顺便说一句,我找到了一个解决方案,谈论使用ulimit改变内存使用限制,可以解决问题,但实际上,我没有执行此命令的必要权限)
当它无法连接到 API 时(从技术上讲,当它无法查找 API 服务器的 IP 地址时),就会发生此错误。也许您的互联网连接短暂中断,或者他们的 SDK 服务器不可用(或者服务器可能由于速率限制而拒绝您的请求)。
无论哪种方式,最好在您的应用程序中编写一些弹性代码。我看到您的错误函数重试 API 调用,但也许值得在执行此操作之前添加超时,以使问题有机会恢复?
error: function (error) {
console.log(error.message);
setTimeout(getPlayers, 10000, containedIn);
}
Run Code Online (Sandbox Code Playgroud)
如果服务器限制您的请求速率,这也会有所帮助。