You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Promise.all() 类型匹配问题求助:请求元组返回类型不兼容

解决请求元组返回类型与Promise.all()的类型匹配问题

你的核心问题是buildAudioFetchRequests的返回值结构和Promise.all()的期望类型不兼容:

  • buildAudioFetchRequests返回的是[string, Promise<[string, Blob]>](包含字符串和Promise的元组)
  • 经过map后得到的数组是Array<[string, Promise<[string, Blob]>]>,但Promise.all()只能接收Promise数组,无法处理这种嵌套Promise的元组结构,因此触发类型报错。

修正方案

调整buildAudioFetchRequests,让它直接返回一个解析为[string, Blob]的Promise,而非包含Promise的元组:

// 修改buildAudioFetchRequests,返回Promise<[string, Blob]>
const buildAudioFetchRequests = (key: string, url: string): Promise<[string, Blob]> => {
  // 等待fetch完成后,将key和Blob结果组合成元组返回
  return useAuthenticatedFetch(url, { initialCache: false }).then(blob => [key, blob]);
};

// 简化createPromises,无需手动指定Promise.all的泛型
const createPromises = async (utteranceObject: Array<string[]>): Promise<Array<[string, Blob]>> => {
  const promises = utteranceObject.map(([key, url]) => buildAudioFetchRequests(key, url));
  return Promise.all(promises);
};

原理说明

  • 修改后的buildAudioFetchRequests会返回一个Promise,当useAuthenticatedFetch完成后,自动把key和Blob结果打包成目标元组。
  • 此时map得到的数组是Array<Promise<[string, Blob]>>,完全符合Promise.all()的输入要求,TypeScript能自动推导正确的返回类型,无需额外泛型标注。

内容的提问来源于stack exchange,提问作者godhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:05:17