Нашел проблему, она была в не медленной загрузке и долгом нахождении в области видимости, а в том что он вызывал сам себя 2 раза + я сам подписывал и вызывал его в другом месте. В общем не надо удалять подписку и подписываться заново. Событие срабатывает когда элемент ВХОДИТ в зону видимости, а не уже находится в ней(т.е. уже работает как надо). Еще надо делать проверку isIntersecting не совсем понимаю ее смысл, хоть и прочитал
документацию но без нее событие срабатывает по 2 раза.
// создаем наблюдатель
const observer_page = new IntersectionObserver((entries, observer) => {
//загружаем посты
if (entries[0].isIntersecting) {
load_posts();
};
}, options);