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(): booleankommer det att kasta ett fel attMust return a value. Om jag returnerarissuccessutanfö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
