实现node-mysql实现异步操作,先说JS中的异步操作。ES6提供了Promise对象的三种状态:pending(进行中)、fulfilled(成功)、rejected(失败)状态转换或单向不可逆过程pending->fulfilledpending->rejected基本上使用Promise定义,有两个参数,resolve和reject,分别对应pending->fulfilled状态和pending->rejected状态//定义constpromise=newPromise(function(resolve,reject){//耗时长的操作//加载图片,请求接口,etc.if(/*异步操作成功*/){resolve(value);}else{reject(error);}});在执行的时候,无论是执行resolve还是reject,都必须获取返回的Promise对象,在then中获取Promise对象中的值。then可以有两个函数,分别对应Promise对象中的resolve参数和reject参数//使用promise.then(function(resolve){...},function(reject){...})的例子模拟异步操作consttimeout=(ms)=>{returnnewPromise((resolve,reject)=>{resolve('donejob')});}console.log(timeout(100))//Promise{'donejob'}timeout(100).then(res=>{console.log(res)//donejob})仔细想想,promise对象中的数据只能拿到then的数据,但是链式调用then还是有可能造成Callbackhell,如果能像同步函数一样操作,让timeout(100)直接有返回值就更好了。ES2017标准引入了async函数。在async函数中promise对象前使用await可以直接从promise对象中获取数据。修改上面的例子。async函数中打印的值与thenconsttimeout=(ms)=>{returnnewPromise((resolve,reject)=>{resolve('donejob')});}console.log(timeout(100))//Promise{'完成作业'}timeout(100).then(res=>{console.log(res)//完成作业})constgetStr=async()=>{conststr=等待超时(100);安慰。log(str)//完成作业}getStr()
