-1

映画タイトルのリストを取得し、それぞれのメタデータをomdbapi.comから取得する Node.js モジュールを作成しています。

これらのリストは多くの場合非常に大きく、同時接続が多すぎるために(現在のインターネット接続が遅いため)接続が停止することがあります。そこで、30 秒後にプロセスを再開するタイムアウト/中止メソッドを設定しました。

私が抱えている問題は、インターネット接続が失われたり、接続が停止したりするたびに、プロセスから抜け出し、接続を再開しないことです。

例:

async function getMetadata () {
  const remainingMovies = await getRemainingMovies();

  for (let i = 0; i < remainingMovies.length;i++) {
    const { data, didTimeout } = await fetchMetadata(remainingMovies[i]);

    // Update "remainingMovies" Array...

    if (didTimeout) {
      getMetadata();
      break;
    }
  }

  if (!didTimeout) {
    return data;
  }
}

これは明らかに単純化されたバージョンですが、基本的には次のとおりです。

  • getMetadata関数は、remainingMoviesグローバル スコープから配列を取得します。
  • fetchMetadata関数を使用してサーバーからメタデータをフェッチします。
  • 接続がタイムアウトしたかどうかを確認します。
  • その場合、関数を再起動し、再度接続を試みます。
  • タイムアウトしなかった場合は、 を終了しfor loopて続行します。
4

1 に答える 1

0

以下のスクリプトに似たものが必要だと思います。async/await の try/catch を使用したエラー処理。これはおそらく、不足しているパズルとして探しているものです。

async function getMetadata() {
  const remainingMovies = await getRemainingMovies();

  remainingMovies.map(movie => {
    try {
      return await fetchMetadata(movie);
    } catch (err) {
      return getMetadata();
    }
  });

}
于 2018-11-30T21:49:24.967 に答える