当前位置: 首页 > 知识库问答 >
问题:

同步或顺序提取服务辅助程序[重复]

商德泽
2023-03-14

我需要发送一系列的PUT

要求:

  • 给定请求方法、url和JSON正文,发送请求
  • 如果成功(response.status
  • 传递响应文本或错误到错误函数
  • 停止执行

如果我只是迭代队列并为每个请求调用fetch,网络差异可能(通常确实)导致请求无序到达服务器

如何生成一个获取请求链,其中每个结果取决于前一个请求的成功与否?

我尝试过的:

  • 而不是XHR(假设我可以使用“async:false”,但这在服务工作者中是不允许的)。

上下文:我正在使用一个应用编程接口请求的“发件箱”来支持离线读取、创建和更新数据。工作良好,除了这个订购问题。


共有2个答案

翁良弼
2023-03-14

我想您会希望遵循ES6promise模式页面中的同步循环模式。

一旦通过.reduce()设置了“成功”promise链,就可以在末尾附加一个.catch()子句来处理错误报告。任何拒绝promise/的promise链内部抛出的都会短路所有的。然后()s并直接跳到最后的。catch()

为了让它像您描述的那样工作,您需要显式地检查获取(…)中的错误HTTP响应状态。然后(…)抛出(如果遇到),因为HTTP错误响应不会触发.catch()。(NetworkErrors或类似的运行时异常将触发.catch())类似于:

fetch('https://example.com').then(response => {
  if (!response.ok) { // See https://fetch.spec.whatwg.org/#ok-status
    throw new Error('Invalid HTTP response: ' + response.status);
  }
  // Otherwise, do something with the valid response.
})

骆利
2023-03-14

与其立即将队列中的每个请求转换为promise,为什么不在需要时从队列中弹出条目呢?

var workQueue = [work, goes, here];
var currentItem = workQueue.shift();
return performWorkWith(currentItem)
         .then(handleResponseWithQueue(workQueue));

function handleResponseWithQueue(queue) {
  return function handleResponse(response) {
      if (response.ok && queue.length > 0)
        return performWorkWith(queue.shift()).then(handleResponseWithQueue(queue));
  };
}

您可以将此模式概括为(简化):

function series(work, queue) {
  if (queue.length <= 0) return;
  work(queue.shift()).then(function() {
    if (queue.length > 0) return series(work, queue);
  });
}
 类似资料:
  • 这是一个奇怪的用例,我需要一些帮助来弄清楚如何相互结合使用辅助/提供者/FactoryModuleBuilders。忽略的缺失。这只是一个例子。 属于我无法更改的库的一组特征具有以下模式。它使用蛋糕图案。 由于这些特征不能被直接注入,我创建了一个允许它们被注入的包装器 在我的代码中,我有一个依赖于服务的控制器,而服务又依赖于库。根据控制器的需要,服务应能够使用“BB”或“CC”。组件如下所示 我将

  • 如果我没有在卸载应用程序之前取消选中“设置”->“辅助功能”下的“辅助功能服务”选项,则辅助功能服务不会与我的应用程序绑定。 注意:要使它再次工作,我需要重新启动我的电话 有谁能建议我如何安全地重新安装我的应用程序而不禁用辅助功能服务吗

  • 我在实施辅助注射时遇到了错误。 辅助注射一直有效,直到我引入了另一个名为管理器的类,它依赖于辅助类。经理想要使用代码在构建喷油器图时中断。它没有更进一步。 直觉上,我理解当对象A得到帮助时,那么B(依赖于A)实际上也通过A得到了隐含的帮助。 请注意,我检查过了。我想像ColinD这样的人肯定知道答案如何使用Guice的AssistedInject?如何将辅助注入类绑定到接口? 出于好奇,有没有好的

  • 从蓝牙android API获取android辅助蓝牙gatt服务。 下面是我们获取ble服务的代码: 甚至尝试以独占方式获取辅助服务,但它返回空对象: 有人可以指出任何指针如何在Android中搜索辅助服务。

  • 如何使用从辅助外部存储器提供文件? 的当前实现只处理 看来,没有办法定义一个

  • 我正在使用MongoDB构建一个架构。 我发现在辅助服务器上发送读取请求以满足统计需求是可能的(也是最佳实践)。结果将是一个更好的表现。 谢谢你的帮助。