【发布时间】:2021-05-26 01:52:36
【问题描述】:
Promises.all 的类型有问题。它应该返回我的Video[] 接口,但我收到了类似的错误
类型“(Video | undefined)[]”不可分配给类型“Video[]”。 输入“视频 | undefined' 不能分配给类型 'Video'。 类型“未定义”不可分配给类型“视频”。
当我把它改成 (Video | undefined)[] 时,我的整个输入出现了错误,它应该又是 Video[]。
我的代码在这里:
const getDemo = async () => {
setError({ show: false, msg: "" });
try {
setIsLoading(true);
const resp: Video[] = await Promise.all(
ourData.map(async (item) => {
if (item.type === videoConstants.TYPE_YOUTUBE) {
return getYouTubeVideo(item.id);
}
if (item.type === videoConstants.TYPE_VIMEO) {
return getVimeoVideo(item.id);
}
})
);
setData([...data, ...resp]);
} catch {
setError({ show: true, msg: "failed to watch demo" });
}
setIsLoading(false);
};
我正在使用我自己的函数来获取 API 以保持“DRY”规则 - 当我获取单个对象时可以,但是当我使用 Promise.all 从我们的数据库中获取所有集合时,我有一个我无法处理的错误。
【问题讨论】:
-
您在地图中运行
async函数的任何原因?ourData.map(async (item)... -
getYouTubeVideo是否返回承诺?如果是这样,您需要在返回之前await以便您的async函数返回真实数据而不是承诺,或者您需要使地图函数不是异步的,因为它已经返回了承诺。 (异步函数只是返回 Promise 的常规函数,您无需编写所有 pomise 代码)。
标签: reactjs typescript promise