Typescript async/await 和 angular $q 服务
Typescript async/await and angular $q service
新的 TypeScript async/await 功能使用 ES6 承诺。 AngularJS 使用 $q
接口略有不同的服务承诺。
有没有什么方法可以使用 TypeScript async/await 功能和 $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
构造函数的实现,该构造函数在每次 resolve
和 reject
调用后启动摘要循环。这是用法示例:https://github.com/llRandom/ts-awaiter
你可以让它像这样工作:
angular.module('your app')
.run(['$window', '$q', function($window, $q) {
$window.Promise = $q;
}]);
新的 TypeScript async/await 功能使用 ES6 承诺。 AngularJS 使用 $q
接口略有不同的服务承诺。
有没有什么方法可以使用 TypeScript async/await 功能和 $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
构造函数的实现,该构造函数在每次 resolve
和 reject
调用后启动摘要循环。这是用法示例:https://github.com/llRandom/ts-awaiter
你可以让它像这样工作:
angular.module('your app')
.run(['$window', '$q', function($window, $q) {
$window.Promise = $q;
}]);