Angular中的$ q或ES6中的Promise

时间:2017-10-24 21:59:21

标签: javascript angularjs ecmascript-6 angular-promise es6-promise

我有一个使用ES6和AngularJS的项目,据我所知,AngularJS $ q promises是同步的,但ES6承诺不会。对? 问题是,有什么区别?什么时候应该使用$ q或ES6? 我知道同步和异步之间有什么区别,但在new PromiseAngularJS $q之间感到困惑。

here

加注

1 个答案:

答案 0 :(得分:1)

关于$q同步性的声明首先适用于ngMock的单元测试。

$q承诺能够在生产中同步:

let foo;

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

他们假设在单元测试中是同步的,因为所有负责异步行为的AngularJS服务($timeout$http等)都是用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);
});