2017-07-07 70 views
1

我正在限制每秒向API提出太多請求。在節點中調節API AJAX請求(獲得速率有限) - 使用AXIOS進行AJAX調用...

我正在將聯繫人導入到我的數據庫並將數據映射到我的數據庫的模式。

API最初會將其聯繫人的「組」(即類別)作爲鏈接數組返回,它們都需要單獨調用API以檢索實際值。

我必須迭代每個聯繫人併爲與每個聯繫人關聯的數組中的每個鏈接分別調用API。我很快達到了我的費率限制(根據API文檔,每秒最多10次),並因此得到一堆不完整的條目和錯誤。

我正在使用Axios庫在Node中創建請求。

我的代碼如下 - 任何幫助解決這個困境將不勝感激 - 謝謝!

 .then(authUser => { 

      // RETURN A LIST OF CONTACTS FROM API 

      axios.get('url', { 
       headers: { 
       Authorization: credentials 
       } 
      }) 
      .then(response => { 

       // MAP OVER EACH CONTACT 
       response.data.map(contact => { 

       let groups = contact.groupLinks.map(group => { 

        // MAP OVER EACH LINK IN EACH CONTACTS GROUP ARRAY AND MAKE AJAX REQUEST. 
        return axios.get(`${group.url}/?alt=json`, { 
         headers: { 
         Authorization: 'credentials' 
         } 
        }) 
        .then(result => { 
         return result.data 
        }) 
        .catch(err => { 
         console.error('FETCH GROUP MEMBERSHIP FAILURE', err.response.data.error) 
         next(err) 
        }) 
        }) 

       return Promise.all(groups) 
       .then(response => { 
        return [contact, response] 
       }) 
+0

這裏有一個很有希望的功能發佈[這裏](https://github.com/mzabriskie/axios/issues/230) – James

+0

謝謝,我看到了這個,但它會給它一個旋轉,如果它有效的話回來。欣賞迴應.... –

回答

0

我不熟悉AXIOS,所以我不確定這是可能的。當你使用數組/對象映射來讓每個組調用它的url時,外部變量將如何被綁定?你能做這樣的事嗎?

// MAP OVER EACH CONTACT 
 
response.data.map(contact => { 
 
/*right here set an interval 
 
*/ 
 
var interval = 0; 
 
let groups = contact.groupLinks.map(group => { 
 
    //increment interval 
 
    interval += 150; 
 

 
    // MAP OVER EACH LINK IN EACH CONTACTS GROUP ARRAY AND MAKE AJAX REQUEST. 
 
    setInterval(function() 
 
     { 
 
      return axios.get(`${group.url}/?alt=json`, { 
 
      headers: { 
 
      Authorization: 'credentials' 
 
      } 
 
     }) 
 
     .then(result => { 
 
      return result.data 
 
     }) 
 
     .catch(err => { 
 
      console.error('FETCH GROUP MEMBERSHIP FAILURE', err.response.data.error) 
 
      next(err) 
 
     }) 
 
     }, interval); 
 
    })

否則我會移動的組響應,接受該組從API返回的遞歸函數的處理,進行必要的電話,彈出剛剛稱爲組,然後調用本身在150毫秒的延遲。

+0

非常感謝您的回覆。欣賞它,會嘗試一下代碼片段,如果它能夠正常工作,就會回來...... –

0

那麼,我最終做了一些完全不同的事情,因爲事實證明這太複雜和低效。我無法讓它工作。

API允許您下載所有用戶組的完整列表。 我創建了一個名爲'ContactGroups'的新數據庫表格

對於聯繫人,API返回一個包含組ID的數組的對象。

要顯示我進行單獨的POST請求的API端點呼叫「/ getgroups」與在有效載荷中的組id陣列的基團,並進行以下分貝查詢:

ContactGroups.findAll({ 
     where: { 
     groupId: req.body.groups // [this is an array of ids] 
     } 
    }) 

這將返回匹配的數組組。