example await async javascript angularjs typescript async-await angular-promise

javascript - async - await angular 7



Mecanografíe el servicio async/await y angular $ q (3)

Finalmente utilicé la siguiente solución:

declare var __awaiter: Function; (window as any).__awaiter = __awaiter; // set global __awaiter to avoid declaring default __awaiter in other files async () => { } // dummy async function to generate __awaiter code for current file angular.module(''ts-awaiter'', []).run([''$timeout'', ($timeout: ng.ITimeoutService) => { function wrap(func: Function) { return function () { func.apply(this, arguments); $timeout(() => { }); // run angular digest }; } var oldAwaiter = __awaiter; (window as any).__awaiter = (thisArg: any, _arguments: any, P: Function, generator: any) => { P = function (executor: Function) { return new Promise<any>((resolve, reject) => { resolve = wrap(resolve); reject = wrap(reject); executor(resolve, reject); }); }; return oldAwaiter(thisArg, _arguments, P, generator); }; }]);

Comliper para Typescript 1.8 genera la función __awaiter en cada archivo donde se usa el operador de await . Lo sustituyo por la implementación que pasa el constructor de Promise personalizado que inicia el ciclo de resumen después de cada resolve y reject llamada. Aquí está el ejemplo de uso: https://github.com/llRandom/ts-awaiter

La nueva característica de TypeScript async / await utiliza promesas de ES6. AngularJS usa promesas de servicio de $q con una interfaz ligeramente diferente.

¿Hay alguna forma de usar la característica asíncrona / espera de TypeScript con las promesas de servicio de $q ?


No creo que puedas usarlos directamente. Pero debería ser bastante fácil convertir la promesa q en una promesa ++, algo como esto:

function Convert<T>(qPromise): Promise<T> { return new Promise<T>((resolve, reject) => { qPromise.then((result: T) => resolve(result), (e) => reject(e)); }); };


Puedes hacerlo funcionar así:

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