1
비동기식 재귀 함수가 있으며 실행하는 데 시간이 오래 걸립니다.Return Ionic 2/Type Script/Angular 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
기능을 실행하는 데 시간이 걸리며 재귀 함수이다.
sendAndRecivesMessage
에서
나는 위의 함수가 실행을 완료 할 때까지 기다린가 필요 기능은 finalMessage
가 어떻게 이것을 달성 할 수 돌아갑니다?
또한, 나는
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