我有一个使用ES6和AngularJS的项目,据我所知,AngularJS $ q promises是同步的,但ES6承诺不会。对?
问题是,有什么区别?什么时候应该使用$ q或ES6?
我知道同步和异步之间有什么区别,但在new Promise
和AngularJS $q
之间感到困惑。
从here
加注答案 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);
});