中止 API 提取后重新启动异步函数
Restart Async Function After Aborting API Fetch
我正在创建一个 Node.js 模块,它获取电影标题列表并从 omdbapi.com 中获取它们各自的元数据。
这些列表通常非常大,有时 (我当前的互联网连接速度较慢) 由于并发连接过多,连接会停止。所以我设置了一个 timeout/abort 方法,在 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
并继续。
我猜您想要类似于以下脚本的内容。使用 try/catch 处理 async/await 的错误处理,这可能是您正在寻找的缺失拼图。
async function getMetadata() {
const remainingMovies = await getRemainingMovies();
remainingMovies.map(movie => {
try {
return await fetchMetadata(movie);
} catch (err) {
return getMetadata();
}
});
}
我正在创建一个 Node.js 模块,它获取电影标题列表并从 omdbapi.com 中获取它们各自的元数据。
这些列表通常非常大,有时 (我当前的互联网连接速度较慢) 由于并发连接过多,连接会停止。所以我设置了一个 timeout/abort 方法,在 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
并继续。
我猜您想要类似于以下脚本的内容。使用 try/catch 处理 async/await 的错误处理,这可能是您正在寻找的缺失拼图。
async function getMetadata() {
const remainingMovies = await getRemainingMovies();
remainingMovies.map(movie => {
try {
return await fetchMetadata(movie);
} catch (err) {
return getMetadata();
}
});
}