Angular2:GET请求未同步运行

时间:2017-09-12 06:24:05

标签: angular http

我遇到HTTP GET请求的问题..代码没有同步运行..下面是我的示例代码:

this.jilidService.getDBList().subscribe(
      data => {
        for (let i = 0; i < data.length; i++) {
          this.data = data;

          this.db_name[i] = this.data[i]
          this.dbname = this.db_name[i]
          console.log("1")

        }
      },
    );
    this.jilidService.getFileList(this.dbname).subscribe(
      data1 => {
        for (let i = 0; i < data1.length; i++) {
          this.data = data1;

          this.filename = data1[i]
          console.log("2")
        }
      },
    );

当我运行代码时,我从控制台日志中获得的结果是:

2
1

我想要的结果是:

1
2

1 个答案:

答案 0 :(得分:3)

是的,这是正确的。 HTTP调用是异步的本质。这就是他们的工作方式。您发出HTTP 请求,并在将来某个时间点收到HTTP 响应。 HTTP一直都是这样。

enter image description here

传递给subscribe的方法基本上是一个回调函数,在收到响应时会回调。

解决问题的一种方法是将第二个调用放在第一个调用的回调函数中。像这样:

this.jilidService.getDBList().subscribe(
      data => {
        for (let i = 0; i < data.length; i++) {
          this.data = data;

          this.db_name[i] = this.data[i]
          this.dbname = this.db_name[i]
          console.log("1")

        }

       this.jilidService.getFileList(this.dbname).subscribe(
         data1 => {
           for (let i = 0; i < data1.length; i++) {
             this.data = data1;

             this.filename = data1[i]
             console.log("2")
           }
         },
       );
      },
    );

另一个选择是按照Rahul的建议使用switchMap。你可以在这里找到一个例子:

How to wait for first Observable to finish before executing others in parallel using RxJS