$q в Angular или Promises в ES6
У меня есть проект, использующий ES6 и AngularJS, и, как я обнаружил, обещания AngularJS $q синхронны, а ES6 - нет. Правильно? Вопрос в том, каковы различия? и когда я должен использовать $ q или ES6? Я знаю, в чем разница между синхронным и асинхронным, но запутался между new Promise
а также AngularJS $q
,
поднять отсюда
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);
});