Как обмануть родную асинхронность / ожидание Chrome, чтобы играть вместе с angularjs (1.x) - PullRequest
0 голосов
/ 09 октября 2018

В течение достаточно долгого времени я был в состоянии успешно использовать синтаксис async / await с трансплантацией Babel и платформой AngularJS (1.x).Распространенная проблема заключается в том, что async / await использует собственные Promises, а не $q angular, поэтому асинхронная работа выполняется за пределами цикла дайджеста.

Я взломал это, выполнив следующее:

angular.module('app', []).run(($window, $q) => {
     $window.Promise = $q;
});

Я знаю, что это опасно по множеству причин, но работает как брелок без каких-либо оберток, таких как $async библиотека, которая не является решением для вставки (и я хочу решение для вставки).

В любом случае, он прекрасно работает, пока я не перенесу исходный код, который генерирует JS, который вызывает фактические конструкторы Promise и т. Д. Но это кошмар для отладки, поскольку даже с исходными картами отладчик Chrome часто теряется.Но Chrome уже некоторое время поддерживает async / await, и отладка этих операторов работает отлично.Но когда я редактирую свою конфигурацию babel, чтобы не передавать async / awaits, мой window.Promise перестает работать, потому что V8 должен использовать свой внутренний конструктор Promise при выполнении этих операторов async / await.

Вопрос в том, есть ли способвзломать его, чтобы он работал с моими текущими настройками?Я хочу покопаться в V8, скомпилировать свой собственный хром и т. Д. Потому что, в конце концов, я все равно буду транслировать асинхронные / ожидающие при создании производственных сборок - мне просто нужно, чтобы он работал в локальной среде для отладки.

Есть идеи?

...