現在、Angular 2、TypeScript、Promiseなど)を学習しようとしています。開発者ツール用の小さなアプリと、ハードコードされたデータを返すだけのサービスをセットアップしました。これはテスト目的でのみ使用されます。
一部のコントロールをテストするためのサーバーラグをシミュレートするために、サービスメソッドに短いタイムアウトを追加したいのですが、そのための正しい構文が見つかりません。サービスコールに5秒の遅延を追加するにはどうすればよいですか?
開発者ツールサービス
@Injectable()
export class DeveloperService {
getExampleData(): Promise<ExampleItem[]> {
const examples: ExampleItem[] = [];
examples.Push({ id: 1, name: 'Spaceman Spiff', location: 'Outer Space', age: 12 });
examples.Push({ id: 2, name: 'Stupendous Man', location: 'The City', age: 30.5 });
examples.Push({ id: 3, name: 'Tracer Bullet', location: 'The City', age: 24 });
examples.Push({ id: 4, name: 'Napalm Man', location: 'War Zone', age: 43.333 });
examples.Push({ id: 5, name: 'Adult Calvin', location: 'In the future', age: 54 });
// TODO: Slow down this return!
return Promise.resolve(examples);
}
}
デベロッパーツールアプリ
getExampleData() {
return (): Promise<Array<any>> => {
return this.developerService.getExampleData();
};
}
PDATE:1実装しようとしている制御の呼び出しにsetTimeout()を追加しようとしましたが、その時点ではデータが入力されていません。サービス呼び出しメソッドに遅延を入れたいので、繰り返し実装することを覚える必要はありません。
getExampleData() {
setTimeout(() => (): Promise<Array<any>> => {
return this.developerService.getExampleData();
}, 3000);
}
undefined
で解決する新しいプロミスreturn new Promise(resolve =>
setTimeout(resolve, 5000)
);
return new Promise(resolve =>
setTimeout(() => resolve(value), 5000)
);
return promise.then(value =>
new Promise(resolve =>
setTimeout(() => resolve(value), 5000)
)
);
Bluebirdプロミスライブラリは、優れたパフォーマンスと便利な機能を備えており、すぐに使用してプロミスチェーンを遅延させることができます。
undefined
で解決する新しいプロミスreturn Bluebird.delay(5000);
return Bluebird.resolve(value).delay(5000);
// or
return Bluebird.delay(5000).return(value);
return bluebirdPromise.delay(5000);
RxJSはすでにAngular 2/4プロジェクトで使用されており、RxJSオペレーターと小さなオーバーヘッドでpromiseを作成または変換するために使用できます。
undefined
で解決する新しいプロミスreturn Observable.of().delay(5000).toPromise();
// or
return Observable.interval(5000).first().toPromise();
return Observable.of(value).delay(5000).toPromise();
return Observable.fromPromise(promise).delay(5000).toPromise();
次のコードを使用して、RxJs 6の値をn
msだけ遅延させることができます。
0
_が発生します)_return timer(n);
_
_return of(value).pipe(delay(n));
_
または
_return timer(n).pipe(mapTo(value));
_
_return from(promise).pipe(delay(n));
_
前の例のいずれかに.toPromise()
afterpipe
を付けます。
_return timer(n).toPromise();
_
_return of(value).pipe(delay(n)).toPromise();
_
等.