承诺离子不一致

时间:2018-11-01 06:30:20

标签: angular typescript ionic-framework angular6 ionic4

我正在使用Ionic 4开发应用程序。因此,对于此特定功能,我正在从电话中的SQLite数据库中获取记录,并将其发布到API。我使用promise来确保在循环到下一个数据之前已经发布了当前数据,依此类推。它运行的很好,突然停止了工作。

我真的不知道发生了什么,因为代码没有任何变化。我希望有人可以帮助我。

有时候,它可以正常工作,但是只有4个数据中的2个或4个数据中的1个被发送到数据库中,而其他数据则返回ERROR错误:未捕获(承诺):Chrome调试器中的[object Object]。

dataPush() {
  this.sqlite.create({
    name: 'database.db',
    location: 'default'
  }).then((db: SQLiteObject) => {
    db.executeSql('SELECT * FROM table', [])
      .then(res => {
        let promise = new Promise((resolve, reject) => {
          for (var i = 0; i < res.rows.length; i++) {
            this.array.push({
              data1: res.rows.item(i).data1,
              data2: res.rows.item(i).data2,
              data3: res.rows.item(i).data3,
              data4: res.rows.item(i).data4,
              data5: res.rows.item(i).data5,
              data6: res.rows.item(i).data6,
              sync: res.rows.item(i).sync
            })

            if (this.array[i].sync == "N") {

              this.http.post("API URL", this.array[i])
                .toPromise()
                .then(
                  res => { // Success
                    console.log(res);
                    resolve();
                  }
                );

            }
          }
        });
        return promise;
      }).catch(e => console.log('Sync Error'));
  }).catch(e => console.log(e));
}

这是给我带来麻烦的功能。希望有人可以帮助我。预先感谢。

欢呼

编辑 该错误是因为它正在创建重复的主键,而mysql不允许它进入表(因此只有一个输入,而其他输入被拒绝)。我根据之前的键设置主键,然后在数字上加上一个(所有操作均在PHP api中完成)。这就是我实现承诺的原因,以确保PHP端在其他数据开始进入api之前完全完成了该任务(将数据插入数据库)。为什么诺言不起作用的任何想法?

1 个答案:

答案 0 :(得分:1)

首先,构建阵列。将所有项目推入god后,就可以调用递归函数。递归函数应如下所示:

this.array

要启动它,只需调用sendToApi(i) { this.http.post("API URL", this.array[i]) .toPromise() .then( res => { // Success console.log(res); if (i < this.array.length - 1) { // Call it again for the next item sendToApi(++i); } } ); } 。每次sendToApi(0)完成时,它将再次调用.post,但顺序中的下一个数字