如何在for循环中运行异步功能

时间:2020-02-07 10:05:30

标签: node.js angularjs http ionic-framework

我正在尝试运行一个异步功能,该功能将发布请求发送到服务器,并将响应记录在控制台中。每当我运行for循环时,都不会发生任何事情。我在这里检查了stackoverflow上的另一个类似问题,但在我的情况下没有任何作用。

注意,该代码适用于Android的ionic + angular。

下面是该函数的代码。

postAPI(suffixUrl, queryString, data, header: any = {}) {
    // console.log(suffixUrl + "\n=>", queryString + "\n=>", data + "\n=>", header);
    this.isDisabled = true;

    data = (header.is == 'yes') ? JSON.parse(data) : data;

    let type = this.fileNameSubStringFn(suffixUrl, '?');
    return new Promise(resolve => {
        this.http.post(this.con.baseUrl + suffixUrl + queryString, data)
          .subscribe(res => {
            // res = res.json();
            // res = JSON.parse(res.data);
            console.log("RES:", res);
            this.hideLoader();
            resolve(this.data);
            return;
          }, (err) => {
            this.logFn("ERROR:" + JSON.stringify(err));
            this.isDisabled = false;
            // this.isConnected = false;
          });
    });
}

下面是为了提交数据而访问上述功能的代码。

var i;

for (i = 0; i < summeriesArray.length; i++) {
    this.postAPI('service_summery', '', JSON.stringify(summeriesArray[i]), { is: 'yes', method: 'post' }).then(data => {
                this.hideLoader();
                this.toast("Successfully saved");
                console.log(data);
    });
}

this.postAPI中的代码未执行,这意味着未发布数据,并且我没有收到任何错误,所以我不知道这里发生了什么。

我希望this.postAPI在for lop中能够成功运行。

谢谢,发布了爱。

1 个答案:

答案 0 :(得分:1)

您可以使用await关键字,因此您可以等待下一次迭代,直到“ postAPI”完成为止。

for (i = 0; i < summeriesArray.length; i++) {
  const data = await this.postAPI('service_summery', '', JSON.stringify(summeriesArray[i]), { is: 'yes', method: 'post' })
  this.hideLoader();
  this.toast("Successfully saved");
  console.log(data);
}