Home > other >  Value returned before assigned in subscribe
Value returned before assigned in subscribe

Time:09-22

I need to return a value from subscribe since I cannot set in a global variable. However, the function always returns before the value is assigned the data from the subscribe. I tried all the answers suggested in posts in the topic but it didn't work

getMessage(field): string {
  this.service.getMessage(field).subscribe(mssg => {
    let message = '';
    message = mssg;
    return message;
  });
}

The calling function: (It's called several times in the component) it's inside setting values for angular material table

something like


    const ELEMENT_DATA: PeriodicElement[] = [
      {position: 1, name: data?
this.getMessage(obj)   ' '   someobj.id
, weight: 1.0079, symbol: 'H'},
      {position: 2,  name: ess?
this.getMessage(se)   ' '   yy.gt, weight: 4.0026, symbol: 'He'},
    ,
    ];

CodePudding user response:

You have not understood well how this works.

Your return statement returns the value in the subscribe function. It does not return the value in the function. Actually, your function returns void.

You have no way of returning an asynchronous value synchronously.

What you should do instead is this :

getMessage(field): Observable<string> {
  return this.service.getMessage();
}

// Somewhere else

this.getMessage('myField').subscribe(() => {
  // Do what you want here
});

CodePudding user response:

Just to complete possible options: You can also "convert" your observable to a promise using lastValueFrom from rxjs package (only makes sense if your observable is only emitting one value) and using an async function (which can be "awaited" by the consumer):

async getMessage(field): Promise<string> {
  return lastValueFrom(this.service.getMessage(field));
}
  • Related