Node.js异步操作MySQL

操作系统中一个杰出的设计是线程,操作系统把CPU处理时间分片后划分出许多短暂的时间片,在时间T1执行一个线程的指令,到时间T2再执行下一个线程的指令,各个线程轮流执行,结果好像是所有线程都在并行前进。这样,编程时可以创建多个线程,在同一期间执行,各个线程可以并行的完成不同的任务。

同步与异步

在单线程中,计算机是一台严格意义上的冯诺依曼式机器,一段代码调用了另一段代码时,只能采用同步调用。简单俩说,必须等待这段代码执行完毕并返回结果后,调用方才能继续向下执行。

有了多线程的支持后,可以采用异步调用,也就是说,调用方和被调方可以属于不同的线程,调用方启动被调方线程后,不等待对象返回结果就继续执行后续代码。

计算中有些处理时比较耗时的,调用这种处理代码时,调用方如果苦苦等待会严重影响程序的性能。

异步调用虽然原理并不复杂,但在使用中容易出现莫名其妙的问题,特别是不同线程共享代码或贡献数据时容易出现问题。因此,要设计一个安全高效的的编程方式需要比较多的设计经验,因此最好不要滥用异步。

异步

JavaScript的异步处理上,ES5的回调函数callback使我们陷入地狱,ES6的承诺promise使我们脱离魔障,ES7的异步等待async-await终于带领我们走向了光明。

其实async-awaitpromisegenerator的语法糖,是为了编码时更加流畅,同时增强代码的可读性。

async用来表示函数是异步的,使用async定义的函数会返回一个promise对象,因此可使用then方法添加回调函数。

await 可以理解为async wait的缩写,await必须出现在async函数内部,因此它是不能够单独使用的。

await后面可以跟任何JS表达式,作用是用来等待promise对象的状态被resolved。如果await异步等待的是promise对象则会造成异步函数停止执行并且等待promise的解决,如果等待的是正常的表达式则会立即执行。

async function fn()
{
  let results = await Math.random();
}
function sleep(seconds)
{
  return new Promise((resolve, reject)=>{
    setTimeout(()=>{
      resolve("sleep over");
    }, seconds);
  });
}
function fn()
{

}

你可能感兴趣的:(Node.js异步操作MySQL)