web-dev-qa-db-ja.com

promiseを返すJavaScriptメソッドに遅延を追加する

現在、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);
}
9
Rethic

ネイティブ約束の遅延

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でのプロミスの遅延

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();
25
Estus Flask

RxJS 6での遅延結果

次のコードを使用して、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();
_

等.

0
Dorus