Моя общая цель - следить за изменениями в моей базе данных и автоматически передавать эти изменения любому пользователю, подключенному к моему веб-сайту.
Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть действие, инициирующее отправку запроса в мою базу данных, и одновременно запускается поток событий, потому что модель, которую я наблюдаю, изменилась. В результате чего выполняется начальное действие, а действие, инициируемое потоком событий, прерывается до его выполнения.
это первое действие, которое запускается для создания новой записи в блоге в моей базе данных
export const topicSubmit = (date, newTopic, newTopicBody, memberId, name) => {
return {
type: 'TOPIC_SUBMIT',
payload: axios({
method: 'post',
url: `/api/blogPosts`,
data: {
"blogTitle": newTopic,
"blogBody": newTopicBody,
"date": date,
"upVotes": 0,
"numComments": 0,
"voteNames": [],
"memberId": memberId,
"steamNameId": name
}
})
.then(response => {
return response.data
})
.catch(err => err)
}
}
// this is the boot script that creates the change stream
var es = require('event-stream');
module.exports = function (app) {
console.log('realtime boot script')
var BlogPost = app.models.BlogPost;
BlogPost.createChangeStream(function (err, changes) {
changes.pipe(es.stringify()).pipe(process.stdout);
});
}
// this is the event listener on my front end that will dispatch all
// changes made in my database to my front end
componentDidMount() {
const { dispatch } = this.props;
let urlToChangeStream = '/api/blogPosts/change-stream?_format=event-stream';
let src = new EventSource(urlToChangeStream);
src.addEventListener('data', function (msg) {
let data = JSON.parse(msg.data);
dispatch(liveChangeBlogs(data))
});
Я ожидаю, что действие 'TOPIC_SUBMIT' должно вернуть выполненное до того, как слушатель события отправит действие 'liveChangeBlogs'
Вот документация, которую я нашел в потоке петлевых событий https://loopback.io/doc/en/lb3/Realtime-server-sent-events.html