如何跳过node.js中的异步调用

时间:2011-06-28 19:18:58

标签: node.js

有没有办法跳过串行或并行呼叫流程中的呼叫。

var flow = require('flow');

    flow.exec(
       function(){
         //Execute
       },
       function(){
         //Skip
       },
       function(){
        //Exec
       },
       function(){
         //Done
       }
    );

2 个答案:

答案 0 :(得分:2)

只需在您可能想要跳过的方法中创建一个条件并立即触发回调

flow.exec(
function taskOne() {
   // long task 
   fs.readFile(path, 'utf8', this);
},
function taskTwo() {
  if (condition) {
    return this(); // trigger the callback.
  }
},
function lastTask() {
   console.log("done");
}
);

答案 1 :(得分:0)

function getUser(userId,username,callback){
    flow.exec(
            function(){
                if(userId)
                    return this(null,userId);

                redis.get('username:'+username,this);
            },
            function(err,userId){
                if(err) throw err;
                if(!userId) return callback(null);
                this.userId = userId;
                redis.hgetall('user:'+userId+':profile',this);
            },
            function(err,profile){
                if(err) throw err;
                profile.userId = this.userId;       
                callback(profile);
            }
    );
}



getUser(null,'gk',function(user){
    if(!user) console.log('not found');     
    console.log(user);  
});

我可以像这样使用