有条件地执行回调

cjr*_*uck 5 asynchronous callback control-flow node.js

什么是解决以下控制流程的最佳方法:

  1. 我只想调用getSomeOtherDataif someData等于某个值/通过一些条件测试

  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();
           });
       });
   });
});           
Run Code Online (Sandbox Code Playgroud)

Joh*_*yHK 3

对此没有很好的解决方案;我发现最好的方法是创建一个本地函数来处理剩余的常见工作,如下所示:

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();
    }
  });
}); 
Run Code Online (Sandbox Code Playgroud)