javascript - 使用 Typescript 时,如何从代码中执行 return defer.resolve() ?

标签 javascript angularjs typescript

我编写了一个返回 promise 的函数。该函数检查是否有任何配置数据,如果没有,则发出 $http 调用来获取它。这是我使用的代码。

   get = (source): ng.IPromise<any> => {
        var self = this;
        var defer = this.$q.defer();
        if (this.loaded == true) {
            return defer.resolve();
        } else {
            this.$http({
                url: '/api/Config/Get',
                method: "GET"
            })
            .success((data: any) => {
               // Some code
            })
            .finally(function () {
                self.loaded = true;
                return defer.resolve();
            })
        }
        return defer.promise;
    }

我的 typescript 有问题。它在 return defer.resolve(); 上给了我一个错误线。错误信息是:

错误 183 无法将“void”转换为“ng.IPromise”

有人可以告诉我如何返回解析结果吗?看来 return defer.resolve() 可能不是我需要做的。

最佳答案

我们仍然需要返回 promise ,所以不要这样:

if (this.loaded == true) {
    return defer.resolve();
} else {
...

我们应该使用

if (this.loaded == true) {
    defer.resolve();
    return defer.promise; // here is what MUST be returned, even if resolved already
} else {
...

注意:我也会更改这一小部分:

.finally(function () {
    self.loaded = true;
    return defer.resolve();
})

进入箭头函数:

.finally( () => {
    this.loaded = true;      // this is now what we would expect to be,
    defer.resolve();         // because the 'self' is created by compiler
    return promise;          // also return the promise
})

关于javascript - 使用 Typescript 时,如何从代码中执行 return defer.resolve() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25396838/

相关文章:

javascript - bower ECONFLICT 即使在添加分辨率后也无法找到适合 jquery 错误的版本

javascript - 当中继器中的对象为空时 AngularJS 显示消息

javascript - AngularJS 流沙

javascript - Angular HttpInterceptor 不适用于 forkJoin

javascript - 在 Angular rxjs 中寻找类似 OrElse 的东西在管道时查找函数

javascript - Chrome 源未显示从 Typescript 生成的文件并具有源映射

javascript - 我如何找出哪些文件没有在网站/网络应用程序中使用?

javascript - 三 Angular 测量Three.js算法

javascript - JS - Google 图表 - 无法读取未定义的属性 'getChartLayoutInterface'

javascript - JavaScript 中的数组 - 对数组中的文本和数字进行排序