KOA+mongoose后台处理异步

正常运用:

page.post('/get',async (ctx)=>{
	var openId = ctx.session.userInfo.openId;
	var rs = await Game.findOne({userid:openId},function(err,_rs){
		return _rs;

	})
	ctx.body = rs;
})

async await就是交替着出现的;先有一个 async然后后面一定有await;

那什么时候用async呢,异步的地方,比如数据库请求基本就可以用了。。。;
下面复杂一点:

page.post('/run',async (ctx)=>{
	var postData = await parsePostData(ctx);
    var pos = valToNum(postData);
    var openId = ctx.session.userInfo.openId;
	await runfunc(ctx,pos,openId);
});
exports.parsePostData = function( ctx ) {
  	return new Promise((resolve, reject) => {
    try {
      let postdata = "";
      ctx.req.addListener('data', (data) => {
        postdata += data
      })
      ctx.req.addListener("end",function(){
        //let parseData = parseQueryStr( postdata )
        resolve( JSON.parse(postdata) )
      })
    } catch ( err ) {
      reject(err)
    }
})
}

用到了Promise,他用resolve(rs)往上抛结果,而await是用 return rs抛结果;另外,promise会更多兼容一些异步,比如nodejs里有的redis,你如果要redis.get(‘xxxx’,(err,rs)=>{})这样的方法时无法用await redis.get(‘xxxx’,(err,rs)=>{}),但是可以用promise;

你可能感兴趣的:(异步)