2017-03-01 5 views
1

약속을 처리하기 위해 돌아가서 .then()으로 연결하십시오. 그러나 콜백을 기대하고 약속을 반환하지 않는 타사 라이브러리를 사용해야합니다. 명확성을 위해콜백 로직 기반 라이브러리 함수를 약속 체인에 통합하십시오.

, 가짜 예 :

person.sayHello() 
    .then(response => introduceMyself()) 
    .then(name => externalLibrary.storeAndGetInfo(name)) 
    .then(info => saySomeInfo(info)) 
    .catch(err => console.log(err)); 

introduceMyself(){ 
    return asyncFunctionToGetAndSayMyName(); 
} 

sayDomeInfo(info){ 
    console.log(info); 
} 

내 문제가 externalLibrary.storeAndGetInfo이 PARAMS을 기대한다는 것입니다 :

storeAndGetInfo(string, callback(valueThatINeedForMyNextChainedFunction)); 

나는이 체인 가능 함수에서 외부 라이브러리 기능을 포장 할 수있는 느낌이 (하나는 약속을 반환), 그리고 the libraryq을 사용하여 콜백 함수를 연기하고 해결하지만, 실제로 구현할 지 모르겠다. 아니면 다른 방법이 있습니까?

당신은 AA 이연 약속을 반환하는 함수로 외부 라이브러리의 호출을 래핑한다

+0

을 Angular의 $ q 라이브러리] (https://docs.angularjs.org/api/ng/service/$q)를 사용하여 AngularJS 다이제스트주기와 통합됩니다. 외부 라이브러리로부터의 약속은 디버그 문제를 미묘하게 어렵게 만듭니다. – georgeawg

답변

1

angularjs 응용 프로그램에이 그 차이를 만드는 경우 PS, 상기 AngularJS와 프레임 워크를 사용 [들어

function promisedStore (name) { 
    var deferred = Q.defer(); //initialize deferred 

    externalLibrary.storeAndGetInfo(name, function(error, result) { 
    if (error) { 
     deferred.reject(new Error(error)); //reject promise if error in cb 
    } else { 
     deferred.resolve(result); //resolve promise if no error in cb 
    } 
    }); 

    return deferred.promise; 
} 
+1

예, 그게 전부입니다! 나는 가까이에 있었지만 충분히 가까이 있지 않았다 :-) 7 분 안에 받아 들일 것이다. – ghego1