Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Angular中的同步Ajax调用_Ajax_Angular - Fatal编程技术网

在Angular中的同步Ajax调用

在Angular中的同步Ajax调用,ajax,angular,Ajax,Angular,在我的angular应用程序中,我有一个场景需要通过ajax调用进行循环。情况如下: 根据第一个请求的响应,我需要启动第二个请求,第二个请求的响应将触发第三个请求,依此类推。只要响应不满足某些标准,就需要中断循环。 根据配置值,循环可以运行10或20次。 只是想让它同步。有谁能提出实施方法的建议 someList.forEach(async (value,index,arr)=> { if(!isPrintingError) { let out = await this.s

在我的angular应用程序中,我有一个场景需要通过ajax调用进行循环。情况如下:

根据第一个请求的响应,我需要启动第二个请求,第二个请求的响应将触发第三个请求,依此类推。只要响应不满足某些标准,就需要中断循环。 根据配置值,循环可以运行10或20次。 只是想让它同步。有谁能提出实施方法的建议

someList.forEach(async (value,index,arr)=> {
  if(!isPrintingError)
  {
    let out = await this.someService.Print(someBuffer);
    if(!out)
    {
       isPrintingError = true;
    }
    else {
      console.log("Print successful");
    }
  }
}


请看一下Promises或async/await。 我不确定您希望如何进行ajax调用,如果有一小块代码就好了

但我们的想法是这样做

try {
   const response1 = await this.apiCall1();
   if (!response1) {
      throw new Error('error1');
   }

   const response2 = await this.apiCall2();
   if (!response2) {
      throw new Error('error2');
   }

   // etc...
} catch (e) {
   // logic in case of error
}

你也可以做一个循环。但是为了提供更好的帮助,我需要一些代码,看看Promises或async/await。 我不确定您希望如何进行ajax调用,如果有一小块代码就好了

但我们的想法是这样做

try {
   const response1 = await this.apiCall1();
   if (!response1) {
      throw new Error('error1');
   }

   const response2 = await this.apiCall2();
   if (!response2) {
      throw new Error('error2');
   }

   // etc...
} catch (e) {
   // logic in case of error
}

你也可以做一个循环。但为了提供更好的帮助,我需要一些代码

尝试使用RxJS库,它还可以帮助您解决其他不同的异步问题

使用RxJS操作符,我会利用Merge操作符


这里有更多信息:

尝试使用RxJS库,它还将帮助您解决其他不同的异步问题

使用RxJS操作符,我会利用Merge操作符


更多信息请点击此处:

谢谢您的片段。下面是如何在输出错误的情况下中断循环

try {
   someList.forEach(async (value, index, arr) => {
      let output = await this.someService.Print(someBuffer);

      if(!output) {
         // break the loop
         throw new Error('error');
      } else {
         console.log("Print successful");
      }
   }
} catch (e) {
   // what to do if failed ?
}

谢谢你的片段。下面是如何在输出错误的情况下中断循环

try {
   someList.forEach(async (value, index, arr) => {
      let output = await this.someService.Print(someBuffer);

      if(!output) {
         // break the loop
         throw new Error('error');
      } else {
         console.log("Print successful");
      }
   }
} catch (e) {
   // what to do if failed ?
}

我很感激。但在这种情况下,每个请求本身也是异步的,并且merge方法将把所有的可观察对象合并成一个单独的输出可观察对象。我很感激。但在这种情况下,每个请求本身也是异步的,merge方法将把所有的可观察对象合并成一个输出可观察对象。我很快就会和你分享。这正是我努力想实现的。顺便说一句更准确地说,每次呼叫都以先前响应的响应为条件。因此,如果当前请求失败,它不应该发送下一个请求并中断循环。在这里,只有当我们从apiCall1()获得成功响应时,才应该调用apiCall2()。确切地说,“wait”将使第二个调用等待。但请将我的示例视为一个小算法。这对你有帮助吗?是的。那么它可能会有用。让我来实现并检查它的行为,非常感谢。它没有按预期工作。让我解释一下。我在当前循环中有10条记录,对于每条记录,我要发送一个打印命令。若任何记录的打印失败,则不应处理下一条记录。e、 g.当打印第二条记录时,打印失败,所以第三次迭代不应该执行。我现在还没有代码片段。我很快就会和你分享。这正是我努力想实现的。顺便说一句更准确地说,每次呼叫都以先前响应的响应为条件。因此,如果当前请求失败,它不应该发送下一个请求并中断循环。在这里,只有当我们从apiCall1()获得成功响应时,才应该调用apiCall2()。确切地说,“wait”将使第二个调用等待。但请将我的示例视为一个小算法。这对你有帮助吗?是的。那么它可能会有用。让我来实现并检查它的行为,非常感谢。它没有按预期工作。让我解释一下。我在当前循环中有10条记录,对于每条记录,我要发送一个打印命令。若任何记录的打印失败,则不应处理下一条记录。e、 g.打印第二条记录时打印失败,因此第三次迭代不应执行。添加了答案添加了答案