async 应该是目前 nodejs 里最简单直白的异步方案了,async 函数实际上就是 generator 函数的语法糖,省掉了 callback 的回调地狱,generator 的 yield next,promise 的 .then .catch,使代码看起来更像是同步流程方案,更扁平化。下面看个例子:
这里我们要实现一个暂停功能,输入 N 毫秒,则停顿 N 毫秒后才继续往下执行。
- // 这里是一个功能函数 也可以是其他比较耗时的操作。
- var sleep = function (time) {
- return new Promise(function (resolve, reject) {
- setTimeout(function () {
- resolve();
- }, time);
- })};
- var start = async function () {
- // 在这里使用起来就像同步代码那样直观
- console.log('start');
- await sleep(3000);
- console.log('end');
- };
- start();
控制台先输出 start,稍等 3 秒后,输出了 end。
async 函数使用方式:
- // async 必不可少 是async函数的标志
- async function myFunc(){
- ... //普通代码
- await ... // 1 耗时代码 或执行耗时函数 执行并等待完成之后继续执行下面的代码
- let res = await ... // 2 耗时代码 或执行耗时函数 并得到返回结果
- ...
- }
错误捕捉方式:
- // async 使用try.catch捕捉错误
- async function myFunc(){
- try{
- ...
- await ...
- } catch(e) {
- throw e;
- }
- }
本文参考 http://cnodejs.org/topic/5640b80d3a6aa72c5e0030b6
来源: