Typescript async/await and angular $q service Typescript async/await and angular $q service typescript typescript

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