美文网首页
异步控制流程 Q .js

异步控制流程 Q .js

作者: sherlock221b | 来源:发表于2015-08-24 00:12 被阅读214次

    <pre>
    //封装promise
    var readFile = function (fileName) {
    var defer = Q.defer();
    fs.readFile(fileName, function (err, data) {
    if (!err) {
    defer.resolve(data.toString());
    }
    else {
    defer.reject(err);
    }

    });
    
    return defer.promise;
    

    }

    //cps
    var cpsReadFile = function(fileName){
    return Q.nfcall(fs.readFile,fileName,'utf-8');

    }
    //基本读取
    readFile("./text01")
    //text01
    .then(function(data){
    console.log("text01",data);
    return readFile("./text02");
    })
    //text02
    .then(function(data){
    console.log("text02",data);
    return readFile("./text03");
    })
    //text03
    .then(function(data){
    console.log("text03",data);
    })
    .fail(function(err){
    console.log(err);
    });

    //采用done读取
    readFile("./text01")
        //text01
        .then(function(data){
            console.log("text01",data);
            return readFile("./text02");
        })
        //text02
        .then(function(data){
            console.log("text02",data);
            return readFile("./text03");
        })
        .done(function(data){
            console.log("text03",data);
        },function(err){
            console.log(err);
        });
    
    
    //队列执行
    var queue = [];
        queue.push(readFile("./text01"));
        queue.push(readFile("./text02"));
        queue.push(readFile("./text03"));
    
    Q.all(queue)
        .then(function(data){
            console.log("返回1",data[0]);
            console.log("返回2",data[1]);
            console.log("返回3",data[2]);
        },function(err){
            console.log(err);
        });
    
    
    //遵循cps的函数 可以使用Q.nfcall nfapply变成promise
    Q.nfcall(fs.readFile,"text01",'utf-8')
        .then(function (data) {
            console.log("text01", data);
            return   Q.nfcall(fs.readFile,"text02",'utf-8')
        })
        .then(function (data) {
            console.log("text02", data);
        },function(err){
            console.log(err);
        });
    

    </pre>

    </pre>

    相关文章

      网友评论

          本文标题:异步控制流程 Q .js

          本文链接:https://www.haomeiwen.com/subject/hnpxcttx.html