Обещание внутри нескольких обещаний в угловых 6? - PullRequest
0 голосов
/ 30 октября 2018

Актуальная проблема : нумерация страниц не отображается в p-table.

Решение : Необходимо сохранить все данные сразу, после чего отобразится пагинация. Для этого я пытаюсь этот метод

На самом деле я обновляю p-Datatable до p-таблицы в ngPrime. В p-datatable загружается с нумерацией страниц, но при обновлении Datatable до таблицы нумерация страниц не отображается.

Я посмотрел на это. Если я делаю settimeout, показывается страница, но мы не можем использовать settimeout (потому что у меня нет времени no process и responsesee).

Итак, я попробовал с обещаниями, но все еще не могу дать каждое обещание.

Мой сценарий: сначала я делаю один ответ, используя ответ, который я делаю несколько ответов и сохраняю данные в массив. Наконец, я использую этот массив в шаблоне p-таблицы. Ниже мой код

allArr = [];
allTemp = [];

ngOnInit():void{
    this.getVal.then((x)=>{
        this.allArr = x;
    })
}

getVal = new Promise( (resolve,reject)=>{    
    let resource = "path/name";
    this.log.getList(resource).subscribe(
    rst=>{
        for(var key in rst){
            this.getInfo(key.name, key.value);
        }
        //here I don't know where I have to resolve the promise

        //setTimeout(() => {
        //    resolve(this.serviceTemp);
        //},2000);

    })
}


getInfo(name, value): void{
    this.log.getDetail(name)
    .subscribe(
        (log: any) => {
            this.allTemp.push(log.detail);
        });
}

Код моего шаблона

<p-table [columns]="tableHeader" [style]="{'width':'100%'}" [value]="allArr" selectionMode="single" [(selection)]="selectedService" [paginator]="true" [rows]="10" [rowsPerPageOptions]="[5,10,25]" 
[responsive]="true" sortField="serviceName" sortOrder="1" sortMode="multiple">

1 Ответ

0 голосов
/ 30 октября 2018

Получил решение. На самом деле я хочу дать обещание всем, для внутренней подписки, а не для первого вызова функции

allArr = [];
allTemp = [];

ngOnInit():void{
  getVal();
}
allPromise = [];

getVal(){    
    let resource = "path/name";
    this.log.getList(resource).subscribe(
    rst=>{
        for(var key in rst){
            allPromise.push(this.getInfo(key.name, key.value));
        }
        Promise.all(this.allPromise).then(()=>{
            this.allArr = this.allTemp;
        });
    })
}


getInfo(name, value): void{
    let _this = this;
    return new Promise(function(resolve, reject) {
        _this.log.getDetail(name)
        .subscribe(
            (log: any) => {
                this.allTemp.push(log.detail);
            });
    })
} 
...