JavaScript 약속과 약속 체인에 대한 이해가 부족합니다. 다음과 같은 방법이 있습니다. 그것은 첫째함수에서 약속 약속을 반환합니다.
을 this.db.find, 나는 두 가지 수익을 가지고, 타이프 라이터이다 작성,하지만반환
private InsertPersonInDB(p : Person) {
return this.db.find({ //<- would this return?
selector: {objType: 'Person'},
fields: ['_id'],
sort: ['_id']
}).then(result => {
let allpersondIds : string[] = [];
(result.docs).forEach(rec => {
allpersondIds.push(rec._id);
});
return allpersondIds;
}).then (allpersonIdsInDB => {
var id = this.getIdfromPersonName(person.personName, allpersonIdsInDB);
person._id = id;
return this.db.post(person) //<- or would this return?
}
}
//Calling function
for(let person of this.persons) {
InsertPersonInDB(person).then(result => {
console.log(result)
//Some UI updates
}).catch(err => {
console.log(err)
//Some UI updates notifying user about failure
});
}
여기에 자바 스크립트 ES6에 맞게 수정할 수 있습니다에게 찾기 함수는 약속이다.
그리고 그 끝은
이다.반환 this.db.post (사람)
도 포스트는 함수는 약속입니다. 여기
, 나는 세 가지 질문
1
)이 기능을 실행하면, 무엇을 반환 있나요?2) 함수가 즉시 약속을 반환하면 체인 은 언제이 실행됩니까?
2) 계층화 된 응용 프로그램에서 약속 체인을 리팩토링하는 데 더 좋은 방법은 무엇입니까? 예 : 몇 가지 체인 다음 서비스에서 실행해야합니다, 다른 UI에서 실행해야합니다, 어떻게 내 약속 코드를 구조합니까?
귀하의 주장을 올바르게 이해하고 있는지 잘 모르겠습니다. 집행자는'function (resolve, reject)'부분이라고 나는 믿는다. 거기에는 return 문이 없습니다. 'resolve' 메소드 만 호출합니다. – Sjoerd
당신이 무슨 뜻인지 아직도 모르므로 일하는 Plunker 예제를 주시겠습니까? '그때'를 사슬로 묶고 싶다면,'그때'에서 새로운 약속을 되 찾으세요. MDN 텍스트는 해결할 새로운 Promise를 구성하거나 모든 값을 리턴 할 수 있음을 설명합니다 (자동으로 약속으로 랩되고 해결됨). return 문을 두지 않으면 'then'에서 'then'까지 정보를 전달할 수 없습니다. – Sjoerd
와우, 나는 당신이 "어떤 가치라도 돌려 줄 수 있다는 것을 몰랐다. (자동적으로 약속에 싸여 당신을 위해 해결할 것이다"). 너가 확실히 맞아. 내 혼란스러운 의견을 삭제하겠습니다. – ArneHugo