中止API提取后重新启动异步功能

时间:2018-11-30 20:50:30

标签: javascript node.js asynchronous node-fetch

我正在创建一个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并继续。

1 个答案:

答案 0 :(得分:0)

我想您想要类似以下脚本的内容。使用try / catch进行async / await进行错误处理,这可能是您正在寻找的缺失难题。

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

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

}