2015-08-18 49 views
10

所以我想在Parse上获取大量的数据,我发现一个好的解决方案就是做一个递归函数:当数据成功找到时,启动另一个请求。我在做它的方式很简单:用Node.js解析SDK JavaScript ENOTFOUND

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); 
      } 
     }); 
    }; 

现在,这里是我想叫什么“问题”:这一点,很频繁,是“错误”回调与此推出:

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,当然),所以我上搜索解析文档,并说同样的事情:“收到错误无效的JSON”。是啊。

我使用由Parse.com提供的解析SDK(npm install parse

我也试图修改位以上的文件parse/node_modules/xmlhttprequest/lib/XMLHttpRequest.js 361线由“主机名”替换host键的解析代码(解析软件包版本:1.5.0),它没有工作,所以我删除了我的更改。

(顺便说一句,我找到了解决办法谈论使用ulimit改变这一问题会得到解决内存使用限制,但实际上,我没有必要的权限才能执行此命令)

+0

ulimit解决方案是什么? – smremde

+0

我发现它[这里](https://www.parse.com/questions/received-an-error-with-invalid-json-from-parse-error-connect-emfile),但实际上它不是一样的错误 –

回答

4

出现此错误当它无法连接到API(技术上无法查找API服务器的IP地址时)。也许你的互联网连接在短时间内丢失了,或者他们的SDK服务器不可用(或者由于速率限制,服务器可能拒绝你的请求)。

无论采用哪种方式,都可以将一些弹性编码到您的应用程序中。我发现你的错误函数会重试API调用,但也许值得在添加超时值之前让问题有机会恢复?

error: function (error) { 
     console.log(error.message); 
     setTimeout(getPlayers, 10000, containedIn); 
    } 

如果服务器限速您的请求,这也将有所帮助。

+0

解析服务器有一个很高的速率限制(比如100/s),同时,我在OVH服务器上执行我的脚本(所以它不应该离线,另外,我通过SSH连接,我正在看错误,所以服务器,实际上,不会脱机)这个错误发生了很多时间(它可能发生类似于每个15个请求)。 –

+0

超时有帮助吗? – smremde

+0

您可以添加'Parse.prototype._api_host = '54 .84.64.193''以确保它不是dns问题吗?我认为这会起作用,或者你可以将它添加到你的/ etc/hosts中 – smremde