当可观察完成时继续循环

时间:2017-03-01 03:35:38

标签: c# asp.net-mvc angular observable

我在for循环中调用http.get服务,我的代码工作正常,问题是即使observable不完整,循环也会继续。

这是我的代码:

Angular 2组件:

let max = 5;
for (let i = 1; i <= max; i++) {
    let boxNo = i > 9 ? "0" + i : "00" + i;
    this.invoiceService.generateChecklist(prefixAndLetter, boxNo).subscribe(
        result => {
            console.log(result.data);
        }
    )
}

MVC控制器:

[HttpGet]
public ActionResult GenerateChecklist(string prefixAndLetter, string boxNo)
{
    if (!string.IsNullOrWhiteSpace(prefixAndLetter))
    {
        return Json(new { success = true, data = boxNo }, JsonRequestBehavior.AllowGet);
    }
    return null;
}

这是我得到的结果:

002
003
001
005
004

1 个答案:

答案 0 :(得分:2)

您可以使用concatAll,在通知订阅者之前等待所有异步调用完成:

let boxes = [];
let max = 5;
for (let i = 1; i <= max; i++) {
    let boxNo = i > 9 ? "0" + i : "00" + i;
    boxes.push(boxNo);
}

Observable.of(boxes.map(t=> this.invoiceService.generateChecklist(prefixAndLetter, t)))
     .concatAll()
     .subscribe(result => {
           result.forEach((item)=> console.log(item.data));
      });