Ionic 2链接承诺

时间:2017-03-31 06:36:12

标签: ionic2

如何向具有离子2的服务器发送多个请求?

我有一个sqlite dB的三个表可以脱机工作。当有活跃的互联网连接时,我想与服务器同步。 我这样做:

  1. 发送第一个表的数据 - 如果成功,它将从服务器返回插入的IDs。因此,我使用新的ID更新本地数据,并使用第一个表ID更新第二个表关系。

  2. 然后我继续发送第二个表的数据,然后像第一个表那样进行一些操作,然后继续第三个表。

            synchData() {
        let result = [];
        this.userDao.get('TOKEN').then(tkn => {
              this.itendao.getAll().then(itins => {
    
                    for (let i of itins) {
                          let event = {
                                Token: '',
                                Itin: {
                                      itin: Object(),
                                      relevs: {
                                            relev: Object(),
                                            obs: []
                                      }
                                }
                          }
                          event.Token = tkn;
                          event.Itin.itin = i;
                          this.relevedao.geItenReleve(i.IdItin).then(rlvs => {
    
                                for (let r of rlvs) {
                                      event.Itin.relevs.relev=r;
                                      this.especesobsDao.getReleveObs(r.CodRel).then(obs => {
                                            event.Itin.relevs.obs.push(obs);
                                      });
                                }
                          });
                          result.push(event);
                    }
                    console.log(result);
              });
        });
    
  3. 如何用离子2做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以使用flatMap和subscribe:

来使用实现
     this.userDao.get('TOKEN').flatMap(tkn => {
        return this.itendao.getAll()
     })
     .flatMap(itins => {
        for (let i of itins) {
            let event = {
                        Token: '',
                        Itin: {
                          itin: Object(),
                          relevs: {
                          relev: Object(),
                          obs: []
                          }
                        }
            }
        event.Token = tkn;
        event.Itin.itin = i;
        }
        return this.relevedao.geItenReleve(i.IdItin)
      })
      .subscribe(rlvs => {
          for (let r of rlvs) {
            event.Itin.relevs.relev = r;
            this.especesobsDao.getReleveObs(r.CodRel).then(obs => {
                event.Itin.relevs.obs.push(obs);
           });
       }
    })