2016-06-22 174 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) 
     }); 
    }