やりたいこと:
URL先のデータを取得してきて、CheerioAPIにロードさせたものを返す関数を作りたいです。
ただし、429やサーバーエラーに対しては一定時間待機してから再帰的に呼び出したりする予定です。
問題:
thenではPromise<CheerioAPI>型を返し、catchでも再帰呼び出しによって同じ関数を実行するので、戻り値が発生するとしたら常にPromise<CheerioAPI>型が返ってくるはずなのですが、getUrl()の戻り値型部分「 Promise<CheerioAPI>」で警告が発生します
Represents the completion of an asynchronous operation
A function whose declared type is neither 'void' nor 'any' must return a value.ts(2355)
ここからどう書けば警告が出なくなるのか知りたいです。せっかくTypeScriptを書いているので戻り値の型をAnyにすることは避けたいです。
TypeScript初心者のため、そもそもの書き方に問題があるかもしれません。そういった点の指摘も歓迎です。
TypeScript
1 /** 2 * return soup by url 3 * @param url 4 * @returns 5 */ 6 async getUrl(url: string): Promise<CheerioAPI> { 7 await axios.get(url) 8 .then(response => { 9 const html: any = response.data; 10 const soup: CheerioAPI = cheerio.load(html); 11 return soup; 12 13 }).catch(err => { 14 //キャッチされたerrがAxiosのエラーであることを保証するための型ガード。これをすることでerrの.statusなどにアクセスしてもエディタから警告が出ない 15 if (axios.isAxiosError(err)) { 16 switch (err.response.status) { 17 case 429: 18 break; 19 20 default: 21 break; 22 } 23 } 24 return this.getUrl(url); 25 }) 26 }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。