在我的代码中,当我添加catch
时,typescript会显示下一个错误:
[TS] “承诺”类型不能分配给“承诺”类型。 输入'void | ItemEntity []'不能分配给'ItemEntity []'类型。 类型'void'不能分配给'ItemEntity []'。
同样只有一个then
和cath
我没有错误。
当我同时使用两个then
和catch
时,会出现错误。
这是代码:
// HTTP GET
getAllItems(): Promise<ItemEntity[]> {
const request = new Request('http://localhost:4000/api/items', {
method: 'GET',
mode: 'cors',
redirect: 'follow',
headers: new Headers({
'Content-Type': 'text/plain'
})
})
return fetch(request)
.then( (response) => (response.json()) )
.then( (items) => (this.resolveMembers(items)) )
// FIXME
//.catch( (error) => (console.log(error)) );
}
private resolveMembers (data : any[]) : ItemEntity[] {
const items : ItemEntity[] = data.map((item) => {
let newItem : ItemEntity = new ItemEntity();
newItem.id = item.id;
newItem.task = item.task;
return newItem;
});
return items;
}
我已经在节点服务器上检查了没有catch的功能,并且GET工作正常。
答案 0 :(得分:3)
它告诉你,你说你的方法将返回Promise<ItemEntity[]>
,但你试图返回Promise<void>
catch意味着尝试恢复并继续在链上。你应该只捕获你可以恢复的东西,否则让错误传播起来让别人抓住它。
代码的简单恢复就是返回一个空数组。我猜想后来的调用将能够处理一个空数组。
return fetch(request)
.then( (response) => (response.json()) )
.then((items) => (this.resolveMembers(items)))
.catch((error) => {
console.log(error)
return []
})
否则你就不能将你的捕获物作为链的一部分
var promise = fetch(request)
promise.catch(console.log)
return promise
.then( (response) => (response.json()) )
.then((items) => (this.resolveMembers(items)))