javascript - 如何使用 Angular 2 和 TypeScript 在 Promise 中设置变量

标签 javascript angularjs typescript angular angular2-services

我对如何在 Angular 2 中通过 TypeScript 使用 Promise 有点困惑。例如,我创建了一个获取一些 JSON 的服务,我想将结果设置为一个数组。

例如,在 Angular 1 中,我会执行以下操作:

workService.getAllWork().then(function(result){
  vm.projects = result.projects;
});

在 Angular 2 中我有以下服务:

import {Injectable} from '@angular/core';
import {Http, Response} from '@angular/http';
import {Observable} from 'rxjs/Observable';

@Injectable()
export class WorkService {
constructor(private _http: Http) { }
  getAllProjects() {
    return this._http.get('/fixture/work.json')
        .map((response: Response) => response.json().projects)
        .do(projects => console.log('projects: ', projects))
        .toPromise()
        .catch(this.handleError);
  }

  private handleError(error: Response) {
    console.error(error);
    return Observable.throw(error.json().error || 'Server error');
  }
}

在我的组件中我有:

import {Component} from '@angular/core';
import {HTTP_PROVIDERS} from '@angular/http';
import {Showcase} from '../showcase/showcase.component';
import {WorkService} from '../services/work.service';

@Component({
  selector: 'App',
  template: require('./landing.html'),
  directives: [Showcase],
  providers: [HTTP_PROVIDERS, WorkService]
})

export class Landing {
  public projects: Array<any>;

  constructor(private _workService: WorkService) {}

  ngOnInit() {
    // How would I set the projects array to the WorkService results
  }
}

任何帮助将不胜感激。

最佳答案

对于 Promise,您可以使用 .then(...) 来链接调用。

  ngOnInit() {
    this.workService.getAllProjects().then(value => this.projects = value);
  }

你应该知道

  ngOnInit() {
    this.workService.getAllProjects().then(value => this.workService = value);
    // <=== code here is executed before `this.workService.value` is executed
  }

如果您想在 promise 解决后执行代码,请使用

  ngOnInit() {
    this.workService.getAllProjects().then(value => {
      this.workService = value;
      // more code here
    });
  }

关于javascript - 如何使用 Angular 2 和 TypeScript 在 Promise 中设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38564802/

相关文章:

javascript - Knockout - 重置可观察的可观察数组

javascript - 如何使用 jQuery 获取所有嵌套元素?

javascript - AngularJS 包含一个位于文件夹中的文件

javascript - 使用 Angularjs 保存时更改按钮上的文本

angularjs - 如何创建新的应用程序项目而不需要一次又一次下载和安装 npm 模块?

javascript - 快速查看字段应通过 JavaScript 获取

angularjs - 使用 AngularJS ui-bootstrap 将类添加到 Accordion 标题?

typescript 用部分对象文字初始化对象

reactjs - 在 React 中制作包装器组件

javascript - 使用 Typescript 时如何修复 NextJS 中的 createPortal?