Typescript async/await and angular $q service
You can make it work like this:
angular.module('your app') .run(['$window', '$q', function($window, $q) { $window.Promise = $q; }]);
I do not think you will be able to use them directly. But it should be quite easy to convert q promise into a++ promise, something like this:
function Convert<T>(qPromise): Promise<T> { return new Promise<T>((resolve, reject) => { qPromise.then((result: T) => resolve(result), (e) => reject(e)); });};
Finally I used the following workaround:
declare var __awaiter: Function;(window as any).__awaiter = __awaiter; // set global __awaiter to avoid declaring default __awaiter in other filesasync () => { } // dummy async function to generate __awaiter code for current fileangular.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 for Typescript 1.8 generates __awaiter
function in every file where await
operator is used. I replace it with implementation which passes custom Promise
constructor which initiates digest cycle after every resolve
and reject
call. Here is usage example: https://github.com/llRandom/ts-awaiter