2015-08-18 70 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