如何在ng.IHttpPromiseCallbackArg中指定回调参数?

时间:2015-09-22 02:47:59

标签: angularjs angular-ui-router

如何在$ http调用中指定错误或成功后执行的函数?

这是我的代码:

 topicsRetrieve = (): ng.IPromise<any> => {
        var self = this;
        var defer = self.$q.defer();
        var url = "/api/Topic/Retrieve/" +
            self.sus.subject.id;
        self.topicHttp = true;
        self.$http({
            method: "GET",
            url: self.ac.dataServer + url
        })
            .then(
                (response: ng.IHttpPromiseCallbackArg<ITopic[]>): any => {
                    self.topics = angular.copy(response.data);
                    self.topicsBase = angular.copy(response.data);
                    return this.$state.go('home.subjects.subject.admin.topics', {
                        subjectId: self.sus.subject.id
                    });
                },
                (error): any => {
                    self.topics = null;
                    self.topicsBase = null;
                    defer.reject(error);
                }
                )
        return defer.promise;
    }

我想要的是能够在$ http呼叫完成后设置self.topicHttp = false,即使$ http呼叫失败。

也可以请某人确认这是我回复此功能承诺的正确方法。我添加了代码,它似乎可以工作,但我想确保我以正确的方式做到这一点。

1 个答案:

答案 0 :(得分:0)

Demo

您可以使用第二个topicsRetrieve = (): ng.IPromise<any> => { var self = this; var defer = self.$q.defer(); var url = "/api/Topic/Retrieve/" + self.sus.subject.id; self.topicHttp = true; self.$http({ method: "GET", url: self.ac.dataServer + url }) .then( (response: ng.IHttpPromiseCallbackArg<ITopic[]>): any => { self.topics = angular.copy(response.data); self.topicsBase = angular.copy(response.data); return this.$state.go('home.subjects.subject.admin.topics', { subjectId: self.sus.subject.id }); }, (error): any => { self.topics = null; self.topicsBase = null; defer.reject(error); } ) .then( (value): any => { self.topicHttp = false } ) return defer.promise; } 函数在成功或错误案例后运行最终代码。我在演示中使用了javascript,你可以尝试一下,但是你可以看看你的版本的以下代码。

int func()
{
    cout << "aep" << endl;
    return 0;
}

int main() {
    int sp;
    int (*k)() = *****func;
    k();
    return 0;
}