1
私は非同期再帰関数を持っており、実行には時間がかかります。戻り値Ionic 2/Type Script/Angular 2の再帰関数からのプロミス
を参照してください。次の2つの関数
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);
}
});
}
ここdoSendAndRecivesMessage
機能は、実行に時間がかかり、それが再帰関数です。
finalMessage
を返すために持っている必要がありsendAndRecivesMessage
機能で
?
また、私は
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;
}
を次のようにそれを試みたが、理由は関数の戻り値の約束がfinalMessage
を解決含まれていない非同期および再帰的です。
この問題を解決するにはどうすればよいですか。あなたは電車(約束電車)、あなたはその電車でワゴンとして呼び出したい関数として全体のことを考えることができ
おかげ
を、あなたは、特定の応答を取得するまでの非同期関数を呼び出しておくと、そのメッセージから何かを返したいです? – toskv
はい、メッセージinMessageCount == 1のときは、finalMessageを返す必要があります。それ以外の場合は、outMessageCountの値を増やして関数自体を呼び出す必要があります。 ロジックには、...、3,2,1のようなinMessageCountというメッセージがあります。 inMessageCount = 1のメッセージが受信されるまで、すべてのメッセージ本文を連結する必要があります。次に、finalMessageを返さなければなりません。 –
私は、コードをどのように構造化するかを理解するのに役立つかもしれない例を追加しました。もし私が私たちがもっと深く行くことができることを知らせなければ。 :) – toskv