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