Javascript 中止API获取后重新启动异步函数

Javascript 中止API获取后重新启动异步函数,javascript,node.js,asynchronous,node-fetch,Javascript,Node.js,Asynchronous,Node Fetch,我正在创建一个Node.js模块,它获取电影标题列表并从中获取各自的元数据 这些列表通常非常大,有时(我当前的internet连接速度很慢)由于并发连接太多而导致连接暂停。因此,我设置了一个超时/中止方法,在30秒后重新启动进程 我遇到的问题是,每当我失去internet连接或连接暂停时,它就会退出进程,而不会重新启动连接 示例: async function getMetadata () { const remainingMovies = await getRemainingMovies(

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

这些列表通常非常大,有时(我当前的internet连接速度很慢)由于并发连接太多而导致连接暂停。因此,我设置了一个超时/中止方法,在30秒后重新启动进程

我遇到的问题是,每当我失去internet连接或连接暂停时,它就会退出进程,而不会重新启动连接

示例:

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(){ const remainingMovies=等待getRemainingMovies(); for(设i=0;i 这显然是一个简化版本,但本质上:

  • 函数从全局范围获取
    remainingMovies
    数组
  • 使用
    fetchMetadata
    函数从服务器获取元数据
  • 检查连接是否超时
  • 如果成功,则应重新启动该功能并尝试再次连接
  • 如果没有超时,则完成循环的
    并继续

我想您需要类似于以下脚本的内容。使用try/catch for async/await处理错误,这可能是您正在寻找的一个缺少的谜题

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

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

}

您可能希望使用
try/catch
获取和处理catch中的错误场景,就像使用
wait
一样,您的代码将在该行上等待(函数的其余部分不会执行),直到从服务器返回内容,否则它将出错,而您没有处理程序。我甚至没有考虑使用
Array.map()
在这种情况下。因此
fetchMetadata
返回一个
对象
,如果它抛出一个错误,它将捕获它并重新运行
getMetadata
函数。我想这就是我要找的。