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 ){
})