javascript - example - promise angular 4




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

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));
    });
};






angular-promise