繁体   English   中英

打字稿async / await和angular $ q service

[英]Typescript async/await and angular $q service

新的TypeScript异步/等待功能使用ES6承诺。 AngularJS使用$q服务承诺,界面略有不同。

有没有办法在$q服务承诺中使用TypeScript async / await功能?

你可以让它像这样工作:

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

我认为你不能直接使用它们。 但是将q promise转换为++ promise应该很容易,如下所示:

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

最后我使用了以下解决方法:

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 for Typescript 1.8在每个使用await运算符的文件中生成__awaiter函数。 我将它替换为通过自定义Promise构造函数的实现,该构造函数在每次resolvereject调用后启动摘要循环。 以下是用法示例: https//github.com/llRandom/ts-awaiter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM