debounce
関数でasync
を使用するにはどうすればよいですか? vue
- app内に、回避したいAPIを継続的に呼び出すAPIからデータを受け取るメソッドがあります。
これが私の方法です:
methods: {
async getAlbums () {
const response = await AlbumService.fetchAlbums()
this.albums = response.data.albums
}
}
以前にlodash
をインストールしたことがありますが、どうすればそれを実現できますか?
Lodashの debounce
関数は関数を受け取り、待機する時間を取り、関数を返します。
したがって、次のようにします。
methods: {
getAlbums: _.debounce(async function() {
const response = await AlbumService.fetchAlbums();
this.albums = response.data.albums;
}, 1000);
}
特定の時間だけデバウンスしたい場合は、関数が非同期であってもlodashsメソッドが機能します。ただし、非同期呼び出しが成功するまでデバウンスする場合は、カスタムデバウンサーが必要になる可能性があります。
function debounceAsync(fn) {
let block = false;
return async function(...args) {
if(block) return;
block = true;
await fn(...args);
block = false;
}
}