Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t在使用Promise.all返回TypeScript中的数组后,在void上调用数组方法_Javascript_Typescript - Fatal编程技术网

Javascript Can';t在使用Promise.all返回TypeScript中的数组后,在void上调用数组方法

Javascript Can';t在使用Promise.all返回TypeScript中的数组后,在void上调用数组方法,javascript,typescript,Javascript,Typescript,供参考: 我有一个TypeScript应用程序,我想在中使用Promise.all() 我创建了一个承诺数组,在数组中调用Promise.all,然后使用.映射一个响应数组 稍后在应用程序中,我再次调用响应数组中的.map,但TypeScript抱怨“类型'void | any[]”上不存在属性'map'。(在我的实际应用程序中,我正在调用.filter,但问题适用于所有数组方法) 我似乎无法回避这样一个事实:对于TypeScript,我的Promise.all可能返回void,而不是任何[]的

供参考:

我有一个TypeScript应用程序,我想在中使用Promise.all()

我创建了一个承诺数组,在数组中调用Promise.all,然后使用.映射一个响应数组

稍后在应用程序中,我再次调用响应数组中的.map,但TypeScript抱怨“类型'void | any[]”上不存在属性'map'。(在我的实际应用程序中,我正在调用.filter,但问题适用于所有数组方法)

我似乎无法回避这样一个事实:对于TypeScript,我的Promise.all可能返回void,而不是任何[]的数组

下面是一个使用Axios发出三个请求的示例:

const requests = [1, 2, 3].map((request) =>
 axios.get(`http://localhost:3000/test${request}`)
);

const promises = await Promise.all(requests)
  .then((responses) => responses.map((response) => response.data))
  .catch(({ message }) => console.log(message));

// later on...

const responses = promises.map(promise => promise.hello);
正是这最后一行导致错误“属性“map”在类型“void | any[]”上不存在。属性“map”在类型“void.ts(2339)”上不存在


如何告诉编译器我的Promise.all将生成一个数组?

正如@jcalz所指出的,这里的问题是.catch,它将返回一种类型的void

检查promises数组是否存在会导致编译器错误消失:

let responses;
if(promises) {
  responses = promises.map(response => response.hello);
}

如果
catch()
调用触发,那么
promises
将属于
void
类型,对吗?所以你应该在使用它之前检查一下承诺的真实性。这对你有用吗?或者你还需要其他东西吗?是的@jcalz,谢谢你,是.catch()导致了这里的问题。我建议删除
.catch()
。您可能不想通过记录错误并返回
undefined
来处理错误。相反,让异常传播并让函数的调用方实际处理它。