gpt4 book ai didi

javascript - 在 fetch 中添加 catch 时出错

转载 作者:行者123 更新时间:2023-11-28 17:46:05 25 4
gpt4 key购买 nike

在我的代码中,当我添加 catch 时, typescript 显示下一个错误:

[ts] Type 'Promise' is not assignable to type 'Promise'. Type 'void | ItemEntity[]' is not assignable to type 'ItemEntity[]'. Type 'void' is not assignable to type 'ItemEntity[]'.

另外,只有一个 thencath 我没有错误。

当我同时使用两个 thencatch 时,会出现错误。

这是代码:

// 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;
}

我已经在节点服务器上检查了功能,没有捕获,并且 GET 工作正常。

最佳答案

它告诉你,你说你的方法将返回 Promise<ItemEntity[]>但您正在尝试返回 Promise<void>

catch在 promise 链的中间意味着尝试恢复并继续在链上。您应该只捕获可以恢复的内容,否则会让错误传播并让其他人捕获它。

代码的简单恢复是返回一个空数组。我猜想随后对 then 的调用将能够处理空数组。

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)))

关于javascript - 在 fetch 中添加 catch 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46693818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com