node调用mysql异步_node-mysql实现异步操作(上)

本文介绍了在Node.js中如何利用Promise和ES2017的async/await处理异步操作,以实现更简洁的代码结构。通过Promise的状态转换和then方法处理异步操作,然后引入async函数和await关键字,使得异步操作更接近同步代码的写法,避免回调地狱。示例中展示了如何使用Promise和async/await进行模拟异步操作。
摘要由CSDN通过智能技术生成

实现 node-mysql 实现异步操作之前,先来谈谈JS中的异步操作。

在ES6中提供了Promise对象

Promise对象的三种状态

pending(进行中)

fulfilled(已成功)

rejected(已失败)

状态的转换还是单向不可逆的过程

pending -> fulfilled

pending -> rejected

基本使用

Promise 定义后,有 resolve 和 reject 两个参数,分别对应 pending -> fulfilled状态 和 pending -> rejected状态

// 定义

const promise = new Promise(function(resolve, reject) {

// 耗时较长的操作

// 加载图片,请求接口等

if (/* 异步操作成功 */){

resolve(value);

} else {

reject(error);

}

});

执行时,无论执行 resolve 还是 reject,返回的都是 Promise对象,要拿到 Promise对象 中的值,要在 then 中获取。then 可以有两个函数,分别对应 Promise对象 中的 resolve参数 和 reject参数

// 使用

promise.then(function(resolve){

...

},function(reject){

...

})

模拟异步操作的例子

const timeout = (ms) => {

return new Promise((resolve, reject) => {

resolve('done job')

});

}

console.log(timeout(100)) // Promise { 'done job' }

timeout(100).then(res => {

console.log(res) // done job

})

仔细想想,promise对象 中的数据从 then 中才能拿到数据,但是 then 这种链式调用还是可能造成回调地狱,如果可以像同步函数一样操作,让 timeout(100) 直接有返回值,那就更好了。

ES2017 标准引入了 async 函数,在 async 函数中 promise对象 前用 await 就可以直接从 promise对象 中直接拿到数据了。

对上面的例子进行修改

在 async函数 中打印的值和在 then 中打印的一模一样

const timeout = (ms) => {

return new Promise((resolve, reject) => {

resolve('done job')

});

}

console.log(timeout(100)) // Promise { 'done job' }

timeout(100).then(res => {

console.log(res) // done job

})

const getStr = async () => {

const str = await timeout(100);

console.log(str) // done job

}

getStr()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值