有条件地执行callback

解决以下控制stream程的最佳方法是什么?

  1. 我只想调用getSomeOtherData如果someData等于某个值/通过一些条件testing

  2. 在这两种情况下,我总是想调用getMoreData

 http.createServer(function (req, res) { getSomeData(client, function(someData) { // Only call getSomeOtherData if someData passes some conditional test getSomeOtherData(client, function(someOtherData) { // Always call getMoreData getMoreData(client, function(moreData) { res.end(); }); }); }); }); 

没有很好的解决办法 我发现的最好的办法是做一个本地的function,照顾剩下的常见工作,像这样:

 http.createServer(function (req, res) { getSomeData(client, function(someData) { function getMoreAndEnd() { getMoreData(client, function(moreData) { res.end(); }); } if (someData) { getSomeOtherData(client, function(someOtherData) { getMoreAndEnd(); }); } else { getMoreAndEnd(); } }); }); 

这是你想要的吗?

 http.createServer(function (req, res) { getSomeData(client, function(someData) { function myFunction (callback) { // Only call getSomeOtherData if someData passes some conditional test if (someData) { getSomeOtherData(client, function(someOtherData) { // Do something. }); } callback(); } myFunction(function () { // Always call getMoreData getMoreData(client, function(moreData) { res.end(); }); }); }); });