angular - Returnerar värde från prenumeration typescript


Hur skulle jag returnera framgång från Save()-metoden.

public SaveItem() {
 if(save()){ // The goal is to use save method like this
  // Close pop up;
}

public SaveAndNew() {
 if(save()){  // The goal is to use save method like this
  // Create new item;
}


private save() {
 let issuccess = false;

 this.myservice.AddParty(newUserObject)
  .subscribe(data => {   
    if (data['status'].toString() === '1') {
      return issuccess = false;
    } else {
      return issuccess = true;
    }
  },
    (er) => {

      return issuccess = false;
    });
}
  • Om jag har save(): boolean kommer det att kasta ett fel att Must return a value. Om jag returnerar issuccess utanför subscribe kommer det alltid att returnera ett falskt värde.

Hur skulle jag vänta på spara-funktionen och returnera ett specifikt värde baserat på svaret?

Jag har läst om callbacks och det verkar inte vara elegant, finns det något elegant sätt att göra detta

callbacks-vs-promises-vs-rxjs-vs-async-awaits

Om det är C# skulle jag göra så här

var isSuccess = await SaveAsync(party);

Svar #1

du kan få din sparmetod att returnera ett observerbart av booleskt värde

public SaveAndNew() {

this.save().subscribe(success =>
{
    if(success)
    {
      // Create new item;
    }
});

private save() : Observable<boolean> {

 return this.myservice
            .AddParty(newUserObject)
            .map(data=> data['status'].toString() === '1')
            .catch(err => Observable.of(false)); 
}

Svar #2

Vad sägs om något liknande detta:

public SaveItem() {
 const isNew = false;
 save(isNew)
}

public SaveAndNew() {
 const isNew = true;
 save(isNew)
}


private save(isNew) {

 this.myservice.AddParty(newUserObject)
  .subscribe(data => {   
    if (data['status'].toString() === '1') {
      saveComplete(isNew);
    } else {
      saveFailed(isNew)
    }
  },
    (er) => {
      saveFailed(isNew)
    });
}

saveComplete(isNew) {
  // Check isNew as needed.
  // Close dialog or whatever
}

saveFailed(isNew) {
  // do whatever here
}

Eller ... TypeScript stöder nu async/await ... så du kan överväga att använda dem här. Se detta för mer information: https://medium.com/@benlesh/rxjs-observable-interop-with-promises-and-async-await-bebb05306875

Relaterade artiklar