node.js 異步流程控制async

node.js其最大的優勢在於高併發,而高併發的背後最核心的就是異步了。node.js中幾乎所有函數都是異步。但是,這對於結構化編程簡直是個噩夢。
比如我希望1)打開數據2)查詢A 表3)當A.userid=10時查詢B表
在node.js中差不就是如下了(僞代碼)

db.open( function(err , db )
    {
        if( !err)
        {
            db.select( 'A' ,function( err ,results) 
            {
                if( result.userid==10)
                {
                    db.select( 'B' , function( err ,results) {
                        db.close()
                    })
                }
            })
        }
    }
)

瘋狂的嵌套.
福利來了nodejs 7+以上默認支持的async完美解決這個問題 又保留了node.js的異步
以redis.get爲例

var redis = require("redis")
var client = redis.createClient(config.redis.port, config.redis.host );
var getValue=function( key  ) {
    return new Promise(function(resolve, reject) {
        client.get(key, function(err, c) {
            if (err) {
                mongodb.close();
                return reject(err);
            }
            resolve(c);
        });
    });
};


async function getV( key )
{
    let data = await getValue( key )
    return data
}

async xxxx.在async內部代碼看起來豈不是和同步代碼一樣呢?
使用方法 可以是爲下面的,我們在getV中resurun的數據都會在function(result )中得到
getV(‘x’).then( function(result ){
})

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章