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

Javascript 发送响应后如何在node.js api中运行后台任务?,javascript,node.js,mongodb,mean-stack,Javascript,Node.js,Mongodb,Mean Stack,我有一个要求,在返回api响应后,我必须运行一分钟的后台进程。该后台进程将在mongodb上执行一些操作 我的方法是,在返回响应后,为后台进程发出一个事件 有没有最好的方法来做这个手术?请帮帮我 谢谢,当您想要对db进行异步调用并等待结果时,您需要在ES6中使用回调、承诺或异步/等待 您可以使用EventEmitter来触发后台任务 或者,可以在返回响应之前触发异步任务 我将实现某种简单的内存队列。在返回响应之前,我将向队列中添加一个任务,并发出一个事件,告诉侦听器队列中有任务 编辑: 我不确定

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

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

有没有最好的方法来做这个手术?请帮帮我


谢谢,

当您想要对db进行异步调用并等待结果时,您需要在ES6中使用回调、承诺或异步/等待


您可以使用EventEmitter来触发后台任务

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

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

编辑:

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

如果您没有执行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')
})

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


我必须返回响应,我不想增加响应时间。您能告诉我如何在这里实现内存队列吗?在哪里可以实现?
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
});