-1

我正在创建一个 Node.js 模块,它获取电影标题列表并从omdbapi.com获取它们各自的元数据。

这些列表通常非常大,有时(在我当前的互联网连接速度较慢的情况下)由于并发连接过多,连接会停止。所以我设置了一个超时/中止方法,在 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

我猜你想要类似于下面的脚本。使用 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 回答