В настоящее время я разрабатываю API в express js. Я хочу написать функцию, которая сохраняет аналитику в БД, но я должен уметь вызвать функцию в режиме огня и забыть. Функция должна принимать параметры и выполнять свою работу. Это должно работать как отдельный поток, и выполнение текущего кода не должно ждать его ответа. Например, как Акка Актеры работают на Java. Может кто-нибудь предложить способ сделать это или ссылку на ссылку?ExpressJs (NodeJs) Fire & Forget
ответ
Вы можете добавить свою информацию в какой-либо MessageQueue, а затем запустить другой процесс, который будет прослушивать сообщения MQ и обрабатывать сообщения соответствующим образом.
Это не так, как действуют Актеры, но это обычно делается в области nodejs.
Например, вы можете использовать kue или AWS SQS или Google PubSub или любого другого доступного решения
// example with kue
// http-process.js
var kue = require('kue');
var queue = kue.createQueue();
...
app.post('/something-somewhere', (req, res) => {
var job = queue.create('event', {
data: 'analytics, data',
median: 5.3,
}).save(function(err){
if(!err) return next(err);
res.send('ok');
});
});
// event-processor.js
var kue = require('kue');
var queue = kue.createQueue();
queue.process('event', function(job, done){
someKindOfORM.myEventsTable.insert({
job.data
}).notify(done);
});
Узел асинхронной по умолчанию. Просто отправьте свой ответ за пределами обратного вызова запроса db:
Я считаю, что он хочет иметь больше пространства при работе с ошибками; использование MQ позволяет ему повторно вставлять db-вставку, если она терпит неудачу или даже выполняет некоторую предварительную обработку –
@ VladMiller. По-прежнему существует возможность обрабатывать ошибки в этом простом подходе. –
- 1. Fire and Forget in C#
- 2. jquery ajax fire and forget
- 3. Spring Background/Fire and Forget processing
- 4. C# Fire and Forget вызов внутри WebMethod
- 5. httpClient.postAsync - Fire-and-Forget - Async Confusion
- 6. Несколько асинхронных запросов на сервер api (fire and forget)
- 7. MySQL «Fire-And-Forget» рекомендуется использовать INSERT/UPDATE/DELETE - mysql_unbuffered_query?
- 8. .NET MVC Fire and Forget Method также возвращает View немедленно
- 9. Веб-служба ASP.NET Fire and Forget (One Way)
- 10. Метод Fire & Forget с использованием Task.Run не работает
- 11. iOS ARC Best Practices for Fire и Forget ASYNC Wrappers
- 12. ExpressJS/NodeJS Redirect Image
- 13. CKEditor и ExpressJS - NodeJS
- 14. Nodejs Expressjs app.get interval
- 15. Nodejs Expressjs URI-символы
- 16. AngularJS, NodeJs и ExpressJS
- 17. nodejs ExpressJs BackboneJs PushState
- 18. NodeJS Домены и expressjs
- 19. API Expose (NodeJS/ExpressJS)
- 20. nodejs expressjs angularjs routing
- 21. nodejs/expressjs redirect не работает
- 22. Nodejs или ExpressJS Аутентификация Windows
- 23. Перемещение файла в ExpressJS/NodeJS
- 24. Nodejs Clustering and expressjs sessions
- 25. Ошибка обработки ошибок NodeJs ExpressJS
- 26. Как modularize nodejs + expressjs код
- 27. Развертывание nodejs приложения с ExpressJS
- 28. NodeJS и ExpressJS Router.use() ошибка
- 29. Файловая маршрутизация в NodeJS/ExpressJS
- 30. Использование RedisStore в nodejs/expressjs
О, это приятное решение. Но как вы думаете, что Обещания могут мне помочь? Я не знаком с обещаниями. Просто спрашиваю. –
Я думал, что там также есть концепция Promise в Акке, не так ли? В принципе, обещания - это способ обработки вашего кода синхронизации. Я добавлю образец для вас сейчас –
@SagarGopale вот хороший учебник для понимания обещаний http://www.html5rocks.com/en/tutorials/es6/promises/. Обещания не предназначены для запуска в отдельном процессе, однако они предназначены для упрощения процесса асинхронного кода. Это довольно сложно объяснить, пока вы не столкнетесь с обратным вызовом-ада первым –