2015-11-20 161 views
1

我正在尋找的處理,以API端點返回JSON(使用聚合物的最新鐵AJAX元素的再現)異步調用一個嘗試和真正的方法。這些API調用依賴於etag匹配,因此發送的etag與服務器上的etag匹配非常重要。除了在某些情況下,快速繼承API調用可能導致序列失序響應(因此可能導致etag不同步),我可以使用該部分。還有多個API端點(即不同的URL)。因此,有時如果使用不同的端點進行快速連續調用是通過iron-ajax元素啓動的,則可能會導致響應處理函數出現問題,因爲響應處理程序當前會檢查ajax元素的URL以瞭解如何正確處理響應。因此,如果第二次調用在接收到第一個調用響應之前覆蓋了ajax組件的URL,那麼當第一次調用返回時,responseHandler不會適當地處理它。也許有更好更可靠的方法來確切地檢查哪個電話已經返回?聚合物鐵Ajax和異步請求(ETAG同步和響應處理)

我知道我不是遇到這種情況的第一人,所以我想知道是否有人在那裏能告訴我開明路徑?我認爲有一個簡單的策略來處理這個問題,可能會實現呼叫排隊等,但我不確定iron-ajax是否有內置的東西可以幫助解決這個問題。

一些示例代碼的例子將是絕對驚人的!

+0

你在運行的服務器? – Blindman67

+0

我在MongoDB的一個實例前面使用python-eve rest api(python-eve.org)運行python web服務器。 – sinjins

回答

0

首先iron-ajax在皮膚下使用熨燙要求,並返回一個Promise。

我想你正在努力實現的是具有連續呼叫的字符串,你可以有響應的順序相同,儘管他們所有正在運行的,可能並行。

這篇文章有從故事 http://www.html5rocks.com/en/tutorials/es6/promises/

文章給出這裏在線例如與一組章節這樣的例子: http://www.html5rocks.com/en/tutorials/es6/promises/async-best-example.html

它在本質上是做了Promise.all(請求數組)。然後(...)給你一個有序的響應數組。

如果你看一下鐵AJAX的源代碼,你會看到它是如何產生的鐵請求,然後使用它。你可以做同樣的事情,但是基於我上面提到的例子。

如果我誤解了,並且您試圖確保請求按順序熄滅,那麼您仍然可以用Promise做到這一點,但不是使用Promise.all,而是使用.then子句依次鏈接它們。

6

如果你依賴於多個API終點,我會爲每一個單獨的iron-ajax元素,以便它們不會影響對方,如果網址變更(通過數據綁定或東西):

<iron-ajax id="cats" url="https://api.example.com/cats" handle-as="json"></iron-ajax> 
<iron-ajax id="dogs" url="https://api.example.com/dogs" handle-as="json"></iron-ajax> 

生成的請求,並使用Promise.all()等待兩個請求完成:

<script> 
    Polymer({ 
     is: 'my-element', 

     ..., 

     fetchPets: function() { 
      var catsRequest = this.$.cats.generateRequest(); 
      var dogsRequest = this.$.dogs.generateRequest(); 

      Promise.all([catsRequest.completes, dogsRequest.completes]) 
       .then(function (requests) { 
        var cats = requests[0].response; 
        var dogs = requests[1].response; 

        // do whatever you want from here... 
        alert(cats.concat(dogs)); 
       }); 
     } 
    }) 
</script>