发送响应后如何在 node.js api 中运行后台任务



我有一个要求,在返回 API 的响应后,我必须运行一分钟的后台进程。该后台进程将在mongodb上执行一些操作。

我的方法是,在返回响应后,我正在为后台进程发出一个事件。

没有最好的操作方法?请帮助我。

谢谢

可以使用事件发射器来触发后台任务。

或者,您可以在返回响应之前触发异步任务。

我会实现某种简单的内存中队列。在返回响应之前,我会向队列添加一个任务,发出一个事件,告诉侦听器队列中有任务。

编辑:

不确定我是否完全理解您的用例。但这可能是一种方法。

如果您没有引用来执行 mongo,则可能需要执行一些快速查找或创建,然后返回响应,然后运行任务

const myqueue = []
const eventHandler = new EventEmitter();
eventHandler.on('performBackgroundTask', () => {
  myqueue.forEach(task => {
    // perform task
  })
})
app.get('/api', function (req, res) {
    const identificationForItemInMongo = 123
    myqueue.push(identificationForItemInMongo)
    eventHandler.emit('performBackgroundTask',     identificationForItemInMongo)
   res.send('Send the response')
})

当您想要对 db 进行异步调用并等待结果时,您需要在 ES6 中使用回调或使用 promise 或 async/await。

阅读此内容以获取更多信息

您可以使用承诺链接来实现您的方法。调用第一个 API,一旦收到响应,就会在 UI 中显示值,然后第二个调用将自动出现,并且不会干扰任何 UI 进程。您可以在此处参考有关承诺链接的更多详细信息。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

var promise1 = new Promise(function(resolve, reject) {
  resolve('Success!');
});
//Run the background process.
var promise2 = new Promise(function(resolve, reject) {
  resolve('Success!');
});
promise1.then(function(value) {
  console.log(value);
  // expected output: "Success!"
  return promise2;
}).then(function(value){
  // Response for the second process completion.
}).catch(function(){
  // Failure for first api call/ second api call
});

相关内容

  • 没有找到相关文章

最新更新