gpt4 book ai didi

javascript - 使用 Typescript 时,如何从我的代码中返回 defer.resolve()?

转载 作者:搜寻专家 更新时间:2023-10-30 21:31:23 25 4
gpt4 key购买 nike

我编写了一个返回 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 有问题。它在返回 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 时,如何从我的代码中返回 defer.resolve()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25396838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com