2016-06-22 113 views
1

我有四个同步工作的任务。node.js中的异步任务

它看起来像这样:

function createEntity(req, res, next) { 
    validator.validateInternalProductRequest(req.body) 
     .then((data) => feedbackSetting.getUrl(data)) 
     .then((data) => bitlyService.shortenLink(data)) 
     .then((data) => internalProductService.saveInternalProductRequest(data)) 
     .then((data) => res.send(data)) 
     .catch(err => { 
     console.log(err); 
     next(err) 
     }); 
    } 

现在,第三和第四任务之间,即越来越短链接后并保存到数据库之前,我需要执行的任务,可以说任务,我需要异步运行。第四项任务,即保存到数据库不应因此而被阻止。

现在这个任务,我必须做异步,有进一步的三个任务: 1.正从DB 2.使卷曲请求数据库

这三项任务,我可以 3.节能设置是否使用async.waterfall或我希望会有任何替代方案?

如何在上述功能createEntity中执行此任务AS?

+0

目前尚不清楚你在寻求什么帮助。看起来你只需将这三个任务放入他们自己的函数中,并将该函数插入到您希望发生的调用链中。如果你想让其余的代码等待这三个任务完成,那么你从你的函数中返回一个承诺,直到你的任务AS完成才能解决。如果你不希望他们等待,那么要么没有回报,要么没有解决的承诺。 – jfriend00

+0

我不想要其他代码来等待这三个任务。 – nirvair

+0

因此,只需将该代码放入函数中,然后在序列中的任何位置调用该函数即可。这看起来很直截了当,我不明白你对此感到困惑吗? – jfriend00

回答

1

如果你不想等待异步任务,只需调用它,不要等待它。这很容易。

function createEntity(req, res, next) { 
    validator.validateInternalProductRequest(req.body) 
     .then((data) => feedbackSetting.getUrl(data)) 
     .then((data) => { 
      callSomeAsyncMethodAndDontWaitForResult(); 
      return bitlyService.shortenLink(data) 
     }).then((data) => internalProductService.saveInternalProductRequest(data)) 
     .then((data) => res.send(data)) 
     .catch(err => { 
     console.log(err); 
     next(err) 
     }); 
    }