订阅后订单数据如何

时间:2018-04-24 14:46:40

标签: angular rxjs

我,这是我的片段:

plageHoraire(): void {
    let desordrePlage = new Array();
    console.log("analyse plage horaire .....");
    for (let i = 0; i < this.plageJour; i++) { //i est le cran
      this.isPlageReserver(this.debJ0H['debJour0H'], i).subscribe(data => {
 
        desordrePlage.push(
          {
            "afficheH": this.trancheDeb + i, "unavailable": data //on check si une des plage son indiponible
          }
        );
        console.log( {"afficheH": this.trancheDeb + i, "unavailable": data});
      });
    }
 
    var tab = [
      {afficheH: 13, unavailable: true}
     ,{afficheH: 9, unavailable: true}
     ,{afficheH: 10, unavailable: true}
     ,{afficheH: 12, unavailable: true}
     ,{afficheH: 8, unavailable: true}
     ,{afficheH: 14, unavailable: true}
     ,{afficheH: 11, unavailable: true}   
     ,{afficheH: 16, unavailable: true}
     ,{afficheH: 15, unavailable: true}
   ];
 
   tab.sort(compare); // on passe la référence à la fonction de comparaison
   console.log(JSON.stringify(tab));
 
   console.log("test réelle");
   console.log(desordrePlage+"DDDDDDDDDDDDD");
 
 
   desordrePlage.sort(compare);
   console.log(JSON.stringify(desordrePlage));
 
   function compare(a, b) {
    if (a.afficheH < b.afficheH) {
      return - 1;
    }
    if (a.afficheH > b.afficheH) {
      return 1;
    }
    return 0;
  }
 
 
 
  }

此选项卡在tab.sort之后很整洁,数据选项卡是静态的, 我想desordrePlage,但这个数据是在订阅之后收到的, 这个desordrePlage是空的,我怎么办等待数据在这里订购desordrePlage?

这是console.log:

analyse plage horaire .....
heure.component.ts:96 [{"afficheH":8,"unavailable":true},{"afficheH":9,"unavailable":true},{"afficheH":10,"unavailable":true},{"afficheH":11,"unavailable":true},{"afficheH":12,"unavailable":true},{"afficheH":13,"unavailable":true},{"afficheH":14,"unavailable":true},{"afficheH":15,"unavailable":true},{"afficheH":16,"unavailable":true}]
heure.component.ts:98 test réelle
heure.component.ts:99 DDDDDDDDDDDDD
heure.component.ts:103 []

我的数据在这里,这是一个循环中的console.log:

{afficheH: 8, unavailable: true}
heure.component.ts:79 {afficheH: 9, unavailable: true}
heure.component.ts:79 {afficheH: 11, unavailable: true}
heure.component.ts:79 {afficheH: 10, unavailable: true}
heure.component.ts:79 {afficheH: 12, unavailable: true}
heure.component.ts:79 {afficheH: 13, unavailable: true}
heure.component.ts:79 {afficheH: 14, unavailable: true}
heure.component.ts:79 {afficheH: 15, unavailable: true}
heure.component.ts:79 {afficheH: 16, unavailable: true}

这是snippet如何调用方法plageHoraire():

  isDayFree()//on vérifie si la journée est libre si true toute la journée dispo, si false on scan toutes les plage
  {
    //console.log(this._semaine.iBoucle + "==>" + this.debJ0H['debJour0H']);
    this.debJ0H['debJour0H'] + this.trancheDeb * this.parTranche; //le début de la journée
    this.finJour = this.debJ0H['debJour0H'] + this.trancheFin * this.parTranche; //on ajouter la fin de la journée pour toucheFin
    //console.log("DEBUT J=>" + this.debJ0H['debJour0H'] + "FIN J =>" + finJour);
    this._calendarService.dispoWbsRdv(this.debJ0H['debJour0H'], this.finJour).subscribe(data => {
      //on récupère les rendez-vous s'il y en a, s'il y en a pas il sera filtré avec le ngIF = 0
      console.log("array push plageHoraire---------------" + data);
      //data = false;
      //data = true la journée est libre, data = false la journée est pris afficher les plages d'horaire
      data ? this.plageHoraire() : this.pushFalse();//data = false journée dispo on passe à la suivante, data = true il faut analyser la journée
      //on affiche les plages d'horaires de la journée
      //  this._semaine.iBoucle++;//important d'ajouter cette incrémentation
    }, (error) => {
    });
  }
我们可以查看methode subscribe() 谢谢你的回复:)

3 个答案:

答案 0 :(得分:1)

在推送for-loop中的订阅内的数据之后,输入:

this.isPlageReserver(this.debJ0H['debJour0H'], i).subscribe(data => {


    desordrePlage.push(
      {
        "afficheH": this.trancheDeb + i, "unavailable": data //on check si une des plage son indiponible
      }
    );
     if (i == (this.plageJour - 1)) {   //ADD THIS LINE
        desordrePlage.sort(compare);    // ADD THIS LINE
     }                                 // ADD THIS LINE
    console.log( {"afficheH": this.trancheDeb + i, "unavailable": data});
  });

答案 1 :(得分:0)

尽我所能,因为代码不是我的母语......

当您{HttpClient请求.subscribe()时,您获得的数据顺序与服务器发送的顺序相同。所以,你有两个选择:

  1. 在返回结果之前在服务器上排序。显然,如果您无法访问服务器,这将无法正常工作。
  2. 接收后对值进行排序,但在使用之前。见下文
  3. 段:

    ngOnInit() {
      this.dummyRestApi.getDummyList().subscribe(
        data => {
          this.list = data.sort((a, b) => a - b);
        }
      );
    }
    

    Plunker: https://plnkr.co/edit/cphgtpO1PQeihiuL2iw7?p=preview

答案 2 :(得分:0)

&#13;
&#13;
ngOnInit() {
  this.dummyRestApi.getDummyList().subscribe(
    data => {
      this.list = data.sort((a, b) => a - b);
    }
  );
}
&#13;
&#13;
&#13;

这是我的网络服务,我想我无法做到,因为数据是独立到达的,不在表格中。

如果时间可用,则Web服务响应为true,如果时间不可用则为false

&#13;
&#13;
$sql="select * from calendar WHERE reserverStartH < $data->fin AND reserverEndH > $data->debut";
//echo json_encode($sql);die;
$pdo = Bdd::getIntance();
$sth =$pdo->prepare($sql);

$sth->bindValue(':reserverStart',$data->debut,PDO::PARAM_INT);
$sth->bindValue(':reserverEndH',$data->fin,PDO::PARAM_INT);

$sth->execute() ? $resultat="requete ok": $resultat= "problème requete"; //debug
$tb = $sth->fetchAll(PDO::FETCH_OBJ);

empty($tb) ?  $resultat=false : $resultat=true;//si résultat on envoie true, il faut détailler la plage d'horaire
echo json_encode($resultat);//true = affiche détail, false = on inique que toute la journée est libre
&#13;
&#13;
&#13;