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)
| 归档时间: |
|
| 查看次数: |
3832 次 |
| 最近记录: |