打字稿async/await和angular $ q service

Ran*_*dom 18 javascript async-await angularjs typescript angular-promise

新的TypeScript异步/等待功能使用ES6承诺.AngularJS使用$q略有不同的接口的服务承诺.

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

Era*_*abi 17

你可以让它像这样工作:

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

  • 用$ q替换本机Promise可能是对应用程序做的最糟糕的事情.它们基本上是不同的实现,表现不同,这将破坏所有依赖于"Promise"的第三方代码.关于'hackish'$窗口的声明是错误的 - 它不是因为Angular无法使用原生窗口,而是因为DI很好. (3认同)
  • 这有效,我现在在几个项目中使用它.但我忍不住摇摇晃晃这种顽皮的感觉.使用Angular $ q服务替换全局Promise对象似乎...... hackish. (2认同)

Ami*_*mid 5

我认为您将无法直接使用它们。但是将q promise转换成++ promise应该很容易,就像这样:

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

  • 问题是在这种情况下,我必须包装返回ng $ promise的每个ng服务。同样,ES6承诺不会启动角度摘要循环。因此,在这种情况下,我必须在每次`await`之后调用`$ apply`。 (4认同)