在 fetch 中添加 catch 时出错

error when add catch in fetch

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

[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 工作正常。

它告诉你,你说你的方法要 return a Promise<ItemEntity[]> 但你正在尝试 return Promise<void>

catch 在 promise 链的中间是为了尝试恢复并继续在链上。你应该只捕捉你可以从中恢复的东西,否则让错误传播并让其他人捕捉它。

您的代码的简单恢复是 return 一个空数组。我猜测对 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)))