前端开发 \ Node.js \ nodejs之async,await

nodejs之async,await

总点击121
简介:async的意思是异步  await的字面意思是等一下 还是比较形象的,通常来说,作为ES7的语法标准,async一般修饰一个函数,说明这个函数是异步的。await一般是用来执行异步操作的,很多情况下它的后面会跟着Promise对象

async的意思是异步 


await的字面意思是等一下

还是比较形象的,通常来说,作为ES7的语法标准,async一般修饰一个函数,说明这个函数是异步的。await一般是用来执行异步操作的,很多情况下它的后面会跟着Promise对象

async和await提出的意义在于:用同步的方式处理异步!

比如我最近在进行一个数据库操作。才开始,死活得不到数据,以前对于异步操作没当回事,这回需要将异步操作,弄成同步操作(需要上面的异步函数返回的数据),自己百度下,然后自己分析思考下,得到了答案。下面举例说明。

最开始的代码:

ar fn_testMysql = async(ctx,next) => {

var strSql = "select * from ";

var tabs = ctx.request.header.tabs;

strSql += tabs;

console.log(tabs);

//console.log(ctx.request.header.condition);

ctx.response.type="text/json";

query(strSql,function (err,datas) {

if (err) {

ctx.response.body = { 'success': 0,'error': err.message };

reject("{ 'success': 0,'error':"+err.message +"}");

} else if (datas.length == 0) {

ctx.response.body = { 'success': 0,'error': '没有找到要修改的数据' };

}

ctx.response.body = { 'success': 1,'data': datas };

}这里面的query是我自己封装的中间件,传入sql语句就能返回对应的json数据。但是这样的操作,在异步里面是得不到结果的,但是和promise进行相结合,就能同步操作等到数据,然后返回,具体如下:

var fn_testMysql = async(ctx,next) => {

var strSql = "select * from ";

var tabs = ctx.request.header.tabs;

strSql += tabs;

console.log(tabs);

//console.log(ctx.request.header.condition);

ctx.response.type="text/json";

var results = await new Promise(function (resolve,reject) {

query(strSql,datas) {

if (err) {

reject("{ 'success': 0,'error':"+err.message +"}");

} else if (datas.length == 0) {

reject("{ 'success': 0,'error':'没有找到要修改的数据'}");

}

resolve(datas);

})

});

ctx.response.body = { 'success': 1,'data': results };

};就这样完美的将异步操作同步化了。具体的promise对象,见我上一篇博客 。点击打开链接


意见反馈 常见问题 官方微信 返回顶部