방금 콜백 지옥을 정리하기 위해 약속을 사용하기 시작했습니다.Bluebird Promise Scope
나는 블루 버드를 사용하기로 결정했으며 브라우저에서 실행 중이지만 즉시 범위 지정 문제가 발생했습니다.
새로운 약속으로 thisArg를 설정하는 방법이 있습니까? 아래 예제는 약속 해결 프로그램의 'this'값이 브라우저 창에 설정되어 있지만 주변 변수로 설정하여 멤버 변수에 쉽게 액세스 할 수 있음을 보여줍니다.
.bind() 메소드가 있지만 약속이 아니라 'then()'메소드 만 범위가 있음을 발견했습니다. 나는 또한 약속 앞에서 'var me = this'를 가질 수 있다는 것을 알았지 만 가능하다면 그것을 피하고 싶었다.
function MyObject() {
this.value = 7;
}
MyObject.prototype.getValue = function() {
return new Promise(function (resolve) {
// some request/processing that takes a long time
var result = Ajax.request(...);
resolve({
value: this.value,
result: result
});
// 'this' is set to window instead of the instance,
// resulting in this.value as undefined
});
}
var obj = new MyObject();
obj.getValue().then(function (value) {
console.log(value); // preferably outputs 7
})
을 약속 * 아무것도 *하지만 무엇을 반환해야 자체 내부에서 생성/반입됩니까? 반환 된 결과에 인스턴스에 이미있는 값을 추가하려는 경우 어떻게해야합니까? 나는 단지 안티 패턴을 피하려고 노력하고있다. 내 예에서 Promise.resolve를 사용할 수는 있지만 실제로 this.value를 Ajax 호출 결과와 함께 포함시키고 싶다고 말합니다. –
"Promise.method"가 여기에서하는 것을 강조해야한다고 생각합니다.이 문제를 정확히 해결합니다. 또한, 비동기 계산이 포함되어 있지 않다면'this.value' 약속을 반환 할 필요가 없습니다. –
@BrendanAnnable 콜백 코드를 약속 된 코드로 변환하는 로직을 작성하기 위해 약속 생성자를 사용해야합니다. - 당신은'.bind' 체인을 가지고 있습니다. –