Infine ho usato la seguente soluzione:
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 per tipografico 1.8 genera __awaiter
funzione in tutti i file in cui L'operatore await
viene utilizzato. Lo sostituisco con l'implementazione che passa il costruttore personalizzato Promise
che avvia il ciclo di digest dopo ogni chiamata resolve
e reject
. Ecco esempio di utilizzo: https://github.com/llRandom/ts-awaiter
Sì. Il primo problema è che devo convertire ogni promessa-risposta di ng-service per attenderlo contro di essa. Il secondo problema è che ES6-promesse generate dall'attesa dell'espressione non iniziano il ciclo di digest angolare – Random