Используя пример next.js api-router-apollo-server-client-client . Когда я пытаюсь реализовать задержку в apollo/resolvers.js
таким образом:
export const resolvers = {
Query: {
viewer (_parent, _args, _context, _info) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({ id: 1, name: 'John Smith', status: 'cached' });
}, 1000);
})
}
}
}
Это не работает в SSR. В состоянии SSR apollo данные пусты, но ожидаемые пользовательские данные { id: 1, name: 'John Smith', status: 'cached' }
.
Я использую это также с sequelize для извлечения данных из базы данных, и это тоже не работает. Я предполагаю, что причина та же.
Возможно, я делаю что-то не так.
Клиентская часть работает нормально (данные отображаются после гидратации React).
Еслимы делаем статический объект вместо Promise:
export const resolvers = {
Query: {
viewer (_parent, _args, _context, _info) {
return { id: 1, name: 'John Smith', status: 'cached' };
}
}
}
Все работает нормально, и это переводит объект в исходное состояние, возвращаемое с сервера SSR с правильной статической разметкой ...
Чего я ожидаю?
Я хочу, чтобы сервер рендерил graphql требуемый, завершает обещания, переводит данные в состояние apollo для SSR и делаетССР для целей SEO. Потому что сейчас, если я подключаюсь к базе данных - она вообще не работает (ничего не отображается. Просто пустая страница, потому что рендеринг был прерван чем-то).