聚合物iron-ajax和异步请求(etag同步和响应处理)

sin*_*ins 2 javascript ajax asynchronous polymer polymer-1.0

我正在寻找一种经过验证的方法来处理返回JSON的API端点的异步调用(使用聚合物最新的iron-ajax元素).这些API调用依赖于etag匹配,因此发送的etag与服务器上的etag匹配非常重要.除了在某些情况下,快速连续API调用可能会导致无序响应(因此可能导致etag不同步),我可以使用该部分.还有多个API端点(即不同的URL).因此,有时如果通过iron-ajax元素启动使用不同端点的快速连续调用,则可能会导致响应处理函数出现问题,因为响应处理程序当前检查ajax元素的URL以了解如何正确处理响应.因此,如果第二个调用在收到第一个调用响应之前覆盖了ajax组件的URL,则当第一个调用确实返回时,responseHandler不会正确处理它.也许有一种更好,更可靠的方法来确切地检查哪个呼叫已经返回?

我知道我不是第一个遇到这种情况的人,所以我想知道是否有人可以向我展示开明的道路?我认为有一个简单的策略来处理这个问题,可能实现了呼叫排队等,但我不确定iron-ajax是否有任何内置可以帮助解决这个问题.

一些示例代码的例子绝对是惊人的!

aki*_*don 10

如果你依赖于多个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>
Run Code Online (Sandbox Code Playgroud)

生成请求,并使用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>
Run Code Online (Sandbox Code Playgroud)