asynkron - TypeScript/Angular 2 - kall en funksjon etter at en annen fullfører


Jeg har to funksjoner som jeg ønsker å kalle, men jeg vil bare kalle den andre etter at den første er ferdig. Hvordan går jeg frem for å gjøre det?

Første funksjon:

getDirectorySubfolders(node: any) {
    console.log('Home:getDirectorySubfolders() entered...');

    this._sdiService.getDirectoriesAtPath("Desktop")
        .subscribe(res => {
            this.nodeChildren = res;
        });
}

Andre funksjon:

getChildren(node: any) {
   console.log('Home:getChildren entered..');
   return new Promise((resolve, reject) =>
   {
       setTimeout(() => resolve(this.nodeChildren.map((c) =>
       {
           return Object.assign({}, c, {});
       })), 1000);
   });
}

Svar #1

Det finnes to enkle måter å kalle din andre funksjon etter at den første er ferdig - du kan gjøre det under this.nodeChildren=res; eller bruke finish-parameteren ():

getDirectorySubfolders(node: any) {
    console.log('Home:getDirectorySubfolders() entered...');

    this._sdiService.getDirectoriesAtPath("Desktop")
        .subscribe(
         res => {
             this.nodeChildren = res;
             this.getChildren(); <-- here
         },
         err => {
             console.log(err);
         },
         () => {
             this.getChildren(); <-- or here
         });
}

Når du kaller getDirectorySubfolders()-funksjonen, vil getChildren() bli kalt etter at getDirectorySubfolders() er fullført. Husk at hvis du bruker finish-parameteren, vil funksjonen bli kalt selv om det oppstår en feil.

Relaterte artikler