我目前正在開發Express js API。我想寫一個函數來將分析保存在數據庫中,但我應該能夠在火中調用函數並忘記方法。該函數應該接受參數並完成其工作。這應該像一個單獨的線程一樣工作,並且當前的代碼執行不應該等待它的響應。例如Akka Actors在Java中的工作方式。有人可以提出一種方法來做到這一點或一些鏈接來引用?ExpressJs(NodeJs)Fire&Forget
1
A
回答
1
您可以將您的信息添加到某種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);
});
2
節點是默認異步。只需在db查詢回調之外發送回復:
app.get("/ping", function (req, res) {
// fire
dbConnection.query("UPDATE analytics SET count = count + 1", function(err, result) {
// forget
});
res.send("Pong");
});
+0
我相信他希望在處理錯誤時擁有更多的空間;使用MQ的允許他重試數據庫插入,如果它失敗,甚至做一些預處理 –
+1
@VladMiller在這個簡單的方法仍然有空間來處理錯誤。 –
相關問題
- 1. ASP.NET Fire和Forget(單向)Web服務
- 2. Fire and Forget(Asynch)ASP.NET方法調用
- 3. Nodejs + Expressjs + EJS + Mongodb
- 4. nodejs expressjs angularjs routing
- 5. CKEditor和ExpressJS - NodeJS
- 6. C#在WebMethod中調用Fire和Forget函數
- 7. Fire-and-Forget異步委託的正確方法
- 8. 對api服務器的多個異步請求(fire and forget)
- 9. 域的NodeJS和expressjs
- 10. nodejs expressjs gzip json content
- 11. Nodejs Expressjs URI字符
- 12. Nodejs聚類和expressjs會話
- 13. 代碼解釋nodejs expressjs mongoose
- 14. ExpressJS/NodeJS重定向圖像
- 15. 的NodeJS/ExpressJS內存泄漏
- 16. 的NodeJS/Expressjs應用結構
- 17. 的NodeJS/ExpressJS:在生產
- 18. 和的NodeJS差異Expressjs
- 19. ExpressJS + NodeJS中的URL路徑
- 20. 的NodeJS ExpressJs BackboneJs pushState的
- 21. 有沒有一種方法可以執行fire-and-forget AJAX請求?
- 22. ExpressJS/NodeJS - 反向代理部署
- 23. ExpressJS /的NodeJS /承諾:從承諾鏈
- 24. 子文件夾視圖expressjs 3x/nodejs
- 25. ExpressJS,NodeJs和Redis簡單登錄錯誤
- 26. 與NodeJS和ExpressJS的Oracle連接
- 27. NodeJs ExpressJS錯誤處理故障
- 28. NodeJS + ExpressJS + MongoDB的高級應用程序
- 29. nodejs最新7.8與expressJS墜毀?
- 30. 與nodejs,php,expressjs私密聊天?
哦,這是一個不錯的解決方案。但是你認爲Promises能夠以某種方式幫助我嗎?我對承諾不熟悉。只是問問。 –
我以爲那裏還有阿卡的諾言概念,不是嗎?基本上,承諾是如何處理您的同步代碼的方式。我現在將爲你添加樣本 –
@SagarGopale這裏是理解承諾的好教程http://www.html5rocks.com/en/tutorials/es6/promises/。 Promise並不是要在單獨的過程中運行,但它們旨在簡化異步代碼的過程。在您首先經歷回調 - 地獄之前,很難解釋 –