JavaScript

0x01async:在普通函数定义前面加上async关键字,普通函数就变成了异步函数。该异步函数默认的返回值是Promise对象。在该函数中return的内容等价于:returnPromise.resolve("内容");//或者reruennewPeomose(function(resolve){resolve("内容");})实例:asyncfunctiontest(){return"内容";//返回的是一个Promise对象}如何使用reject()提供错误信息:如果需要像reject()一样提供报错信息,那么需要使用throw抛出一个异常。注意:如果出现并抛出了异常,那么就无法在return内容。asyncfunctiontest(){throw"我是错误信息";}0x02await:await它只能出现在异步函数中,它可以暂停自己这个异步函数的执行,等待promise对象返回结果后再向下执行。通常返回promise对象后,需要使用.then方法来接收异步函数传过来的值。在该函数前面加上await关键字,返回的值就是resolve中的值,别忘了使用变量接收~如果需要捕获错误信息,需要使用.catch方法来捕获。//变为异步函数asyncfunctionas(){throw"错误信息";//抛出异常return"返回的内容";//返回成功信息}//因为await需要出现在异步函数中,所以定义asyncasyncfunctionrun(){//接收promise返回的结果,catch用来捕获错误consta=awaitas().catch(function(err){console.log("错误信息为:",err);//错误信息为:错误信息});console.log(a);//返回的内容}run()实战案例-检查数据库是否存在相同的昵称和账号,并返回客户端,错误代码://注册请求:进入后获取表单提交的数据,并判断数据库是否有此昵称和账号admin.post("/register",function(req,res){//查询数据库是否有此昵称User.findOne({username:req.body.username}).then(function(ret){/*如果ret不等于null,说明就是该昵称已经存在了,将这个消息就要告诉客户端*/if(ret!=null){/*在这里其实就出问题了,这里的return我们期望它起一个终结的作用,但是,它最终返回给了这个回调函数,并不起终结作用。首先要知道,res.send()只能在同一个路由里返回一次。那么如果昵称和账号都存在了,这就是返回了两次,这显然就报错了。*/returnres.send({code:1,message:"该昵称已经存在!"});}})})实战案例-检查数据库是否存在相同的昵称和账号,并返回客户端,正确代码://由于里面需要使用await,所以在这个回调函数外写一个asyncadmin.post("/register",asyncfunction(req,res){//使用await等待返回的结果,然后将结果赋值给username这个变量。constusername=awaitUser.findOne({username:req.body.username});//接下来判断这个变量是否是nullif(username!=null){//这样才是真正的终结了returnres.send({code:1,message:"该昵称已经存在!"});}//然后在判断账号是否存在,如果昵称存在了,就不会执行这里了,更不会res.send两次})

2021-8-17 90 0