$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);
});
Другие вопросы по тегам