Ich habe asynchrone rekursive Funktion und das dauert einige Zeit zur Ausführung.Rückgabeversprechen von Rekursive Funktion in Ionic 2/Typ Skript/Angular 2
Siehe folgenden zwei Funktionen
public sendAndRecivesMessage(content:string, finalMessage:Message, outMessageCount:number = 1){
this.promise = new Promise((resolve, reject) => {
this.doSendAndRecivesMessage(content, finalMessage, outMessageCount);
console.log("Have to wait until above function finish executing");
resolve (finalMessage);
});
return this.promise;
}
private doSendAndRecivesMessage(content:string, finalMessage:Message, outMessageCount:number = 1){
let newContent = IREDMART_KEYWORD + APP_IDENTITY + outMessageCount + " " + content;
let message:Message = new Message(newContent, API_END_POINT);
this.sendMessage(message);
let promise = this.recieveMessage();
promise.then((message) => {
let inMessageCount:number = message.content.split(MSG_COUNT_SEPARATOR)[1];
finalMessage.content += message.content.split(MSG_COUNT_SEPARATOR)[2];
if(inMessageCount == 1){
finalMessage.reciever = message.reciever;
finalMessage.date = message.date;
}
else{
this.sendAndRecivesMessage(content, finalMessage, outMessageCount + 1);
}
});
}
Hier doSendAndRecivesMessage
Funktion dauert einige Zeit auszuführen, und es ist eine rekursive Funktion.
in sendAndRecivesMessage
Funktion Ich muss warten, bis über Funktion seine Ausführung beendet und haben zurückzukehren finalMessage
Wie kann ich das erreichen?
Auch habe ich versucht, es wie folgt
public sendAndRecivesMessage(content:string, finalMessage:Message, outMessageCount:number = 1){
let newContent = IREDMART_KEYWORD + APP_IDENTITY + outMessageCount + " " + content;
let message:Message = new Message(newContent, API_END_POINT);
this.promise = new Promise((resolve, reject) => {
this.sendMessage(message);
let promise = this.recieveMessage();
promise.then((message) => {
let inMessageCount:number = message.content.split(MSG_COUNT_SEPARATOR)[1];
finalMessage.content += message.content.split(MSG_COUNT_SEPARATOR)[2];
if(inMessageCount == 1){
finalMessage.reciever = message.reciever;
finalMessage.date = message.date;
resolve(finalMessage);
}
else{
this.sendAndRecivesMessage(content, finalMessage, outMessageCount + 1);
}
});
});
return this.promise;
}
Aber wegen der Funktion ist async und rekursiv die Rückkehr Versprechen enthält finalMessage
nicht gelöst.
Bitte geben Sie mir einen Vorschlag, um dieses Problem zu lösen.
Dank
gerade dies klar zu bekommen, wollen Sie fordern eine asynchrone Funktion zu halten, bis Sie eine bestimmte Antwort zu bekommen und dann etwas von dieser Meldung zurück ? – toskv
Ja, wenn die Nachricht inMessageCount == 1, muss ich die finalMessage zurückgeben, Sonst muss Funktion selbst aufrufen, indem Wert von outMessageCount, Die Logik empfängt Nachrichten hat inMessageCount wie ..., 3,2,1. Ich muss alle Nachrichtenkörper concat, bis InMessageCount = 1 Nachricht erhält. Dann müssen Sie finalMessage zurückgeben. –
Ich habe ein Beispiel hinzugefügt, vielleicht wird es helfen, herauszufinden, wie Sie Ihren Code strukturieren. Wenn nicht, lassen Sie es uns wissen, wir können tiefer gehen. :) – toskv