javascript - Angular 服务 promise

标签 javascript angularjs typescript

所以,我有一个 Angular 应用程序可以对服务器进行静态调用。有一项服务可以结束对服务器的调用。我目前在服务上有一个方法,它只是从 $http 服务返回 promise 。我想对该方法调用添加一些额外的处理,但由于 promise 的异步性质,我不确定该怎么做。

目前在 typescript 中:

class BoardService {
    private $http;

    constructor($rootScope: IRootScope, $http: ng.IHttpService) {
          this.$http = $http;
    }

    fetchBoard(id: number) {
        return this.$http.get("/api/board/" + id);
    }
}

我想把它变成这样:

fetchBoard2(id: number) {
    this.$http.get("/api/board/" + id).success(function(data)
    {
        // Manipulate the data

    });

    // return manipulated data; 
}

你会怎么做?

最佳答案

整句警告!因为 promise 是异步的,所以任何基于 promise 数据返回数据的东西本身都必须返回一个 promise。您希望 fetchBoard2 返回一个 promise ,一旦 $http promise 返回并且您已经操作了数据,该 promise 就会得到解决。您可以使用 Angular 的 $q 服务来完成此操作。

fetchBoard2(id: number) {
  var deferred = $q.defer();

  $http.get("/api/board/" + id).success(function(data) {
    var newData = doSomething(data);
    deferred.resolve(newData);
  });

  return deferred.promise;
}

管理额外的延迟对象很快变得繁琐,因此您可以使用 then 将您自己的操作插入到管道中。

fetchBoard3(id: number) {
  return $http.get(...).then(function(data) {
    return doSomething(data);
  });
}

有关更多详细信息,请点击此处 a good article .

关于javascript - Angular 服务 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30533105/

相关文章:

javascript - 我可以在循环语句中使用这个编码吗

javascript - 在 requirejs 文本插件中使用字符串作为参数

javascript - MyEclipse 在 JSP 中禁用 javascript 验证

javascript - 如何将 HTML 表单输入存储在 Node JS 变量上?

javascript - 为什么 AngularUI Bootstrap 日期选择器没有弹出?

angularjs - 强制重新评估 ng-if

angularjs - angular-bootstrap-ui 模态大小不起作用

typescript - typescript 中动态导入模块的类型/类是什么?

javascript - 没有 NodeJS 的 Typescript 命令行编译

typescript - Typescript 中的链接 Promise