iT邦幫忙

0

angular教學中的Promise

Zaku 2018-02-23 00:27:305413 瀏覽

各位好想請問一下angular的教程中,會用到primise的用法,但他可能搭配了typescript,等方式在寫,我弄了一下還是不是很懂下方是案例:

getHero(id: number): Promise<Hero> {
    return this.getHeroes()
               .then(heroes => heroes.find(hero => hero.id === id));
  }

他跟一般定義resolve與reject去return用法好像不同,
不太理解 Promise<> ,這個的用法<>中的 Hero 是指 then 中retuen會傳給Hero?Hero必須是某一個typescript定義的結構?
對於他到的回傳方式跟彼此對應的關係不是很能理解解..

完整案例

import { Hero } from './hero';
import { HEROES } from './mock-heroes';
import { Injectable } from '@angular/core';

@Injectable()
export class HeroService {
  getHeroes(): Promise<Hero[]> {
    return Promise.resolve(HEROES);
  }

  getHeroesSlowly(): Promise<Hero[]> {
    return new Promise(resolve => {
      // Simulate server latency with 2 second delay
      setTimeout(() => resolve(this.getHeroes()), 2000);
    });
  }

  getHero(id: number): Promise<Hero> {
    return this.getHeroes()
               .then(heroes => heroes.find(hero => hero.id === id));
  }
}

./hero

export class Hero {
  id: number;
  name: string;
}

./mock-heroes

import { Hero } from './hero';

export const HEROES: Hero[] = [
  { id: 11, name: 'Mr. Nice' },
  { id: 12, name: 'Narco' },
  { id: 13, name: 'Bombasto' },
  { id: 14, name: 'Celeritas' },
  { id: 15, name: 'Magneta' },
  { id: 16, name: 'RubberMan' },
  { id: 17, name: 'Dynama' },
  { id: 18, name: 'Dr IQ' },
  { id: 19, name: 'Magma' },
  { id: 20, name: 'Tornado' }
];

https://angular.io/tutorial

看更多先前的討論...收起先前的討論...
weiclin iT邦高手 4 級 ‧ 2018-02-23 00:51:17 檢舉
用法相同吧? 只是多了一個<>裡面放回傳的類型而已, Hero 看樣子應該是個類別名稱?
Zaku iT邦新手 4 級 ‧ 2018-02-23 12:51:00 檢舉
抱歉我補充上去了
weiclin iT邦高手 4 級 ‧ 2018-02-23 14:24:44 檢舉
那沒錯了吧? Promise 取得的就是個 Hero 類別的物件
Zaku iT邦新手 4 級 ‧ 2018-02-23 20:40:19 檢舉
是指回傳需要回傳符合Hero 類別的物件 ,<>裡面一定要指定一個類別物件?他有關鍵字嗎,<>這個的用法
weiclin iT邦高手 4 級 ‧ 2018-02-23 21:16:45 檢舉
https://www.typescriptlang.org/docs/handbook/generics.html
rising iT邦新手 5 級 ‧ 2018-02-26 17:48:37 檢舉
這是來自物件導向語言的泛型功能(Generic),主要用來定義通用方法的物件型態
Zaku iT邦新手 4 級 ‧ 2018-02-26 23:42:27 檢舉
感謝兩位我在閱讀一下
承上面,且如果有呼叫到該function,typescript就可以用強型別來使用內部的屬性,且promise會等api回傳後才做下一件事。
lioff iT邦新手 5 級 ‧ 2018-03-07 11:04:10 檢舉
Promise <Hero[]>是个泛型约束返回而已, 和Promise <Hero> 区别就是 一个返回类型数组,一个返回类型

尚未有邦友回答

立即登入回答