我需要从 Service Worker 发送一系列 PUT & POST 请求。发送它们的顺序很重要。
要求:
- 给定请求方法、url 和 JSON 正文,发送请求
- 如果成功(
response.status < 300
):- 将 body 传递给成功函数
- 调用队列中的下一个请求
- 如果失败:
- 将 responseText 或 err 传递给错误函数
- 停止执行
如果我简单地遍历队列并fetch
为每个请求调用,网络差异会(通常会)导致请求无序到达服务器。
如何提出一系列fetch
请求,其中每个结果都取决于前一个结果的成功?
我试过的:
- XHR 代替(假设我可以使用“async:false”,但这在 Service Worker 中是不允许的)。
setTimeout(sendRequest, i*200)
. 一个黑客,不可靠。Promise loops
基于这些示例ES6 Promise Patterns。这似乎是最有希望的,但这些示例是针对假设成功的简单案例。无法让它与 fetch 一起使用。
上下文:我正在使用 API 请求的“发件箱”来支持离线读取、创建和更新数据。效果很好,除了这个排序问题。