0

나는 ES6와 AngularJS를 사용하는 프로젝트를 가지고 있으며 AnglesJS $ q 약속은 동기식이지만 ES6에서는 약속하지 않습니다. 권리? 질문은 무엇입니까, 차이점은 무엇입니까? $ q 또는 ES6은 언제 사용해야합니까? 동기 및 비동기의 차이점을 알고 있지만 new PromiseAngularJS $q 사이에 혼동을 느낍니다. here

+0

당신은 무엇을 의미합니까 "$ q를 약속 동기"? 나는 Angular를 모르지만 내가하고 싶지는 않지만 그들의 문서를 보는 것조차별로 도움이되지 못했습니다. 우리가 비동기 코드를 작성하고 (그리고 콜백 지옥을 피하는) 약속의 요점이 아닌가? – helb

+1

'맞습니까? '- 잘못되었습니다. 약속은 비동기식으로 정의됩니다. $ q와 ES6 약속의 차이점은 $ q 약속 (적어도 몇 달 전에는 해결할 수 있음)이 아직 약속/A + 규격에 부합하지 않는다는 것입니다. –

+0

$ q 약속 (적어도 몇 개월 전) Promise/A + spec compliant' 그것은 무엇을 의미합니까? – GeoCom

답변

1

에서

레이즈 명령문 약 $q 동시성 애초에 ngMock과 부 검사에 적용된다.

$q 약속은 생산되는 동기의 할 수 다음과 같습니다

let foo; 

$q.resolve().then(() => { foo = 1 }); 
$rootScope.$digest(); 
console.log(foo === 1); 

그리고 그들은, 단위 테스트에서 동기로을 가정 때문에 모든 AngularJS와 비동기 행동 ($timeout에 대한 책임이 있습니다 서비스, $http , etc.)는 완전히 동기식 테스트를 수행하기 위해 ngMock으로 조롱됩니다.

it('...', inject(($q) => { 
    let foo; 

    $q.resolve().then(() => { foo = 1 }); 
    $rootScope.$digest(); 
    expect(foo).toBe(1); 
})); 

ES6의 약속은 디자인에 의해 비동기 및 then 콜백 다음 틱에서 실행하는 동안 :

it('...', (done) => { 
    let foo; 

    Promise.resolve(1).then(() => { 
     foo = 1; 
     expect(foo).toBe(1); 
    }) 
    .then(done, done.fail); 
});