点滴记录
自古成功在尝试。

NODE学习笔记三-异步函数回调使用Async、Await、Promise使用

nodejs是采用javascript编写的,离不开异步、回调。下面是浏览多个网站的大佬们的讲解,对我等新手很是实用。

异步编程是指由于异步I/O等因素,无法同步获得执行结果时,在回调函数中进行下一步操作的代码编写风格,常见的如setTimeout函数、ajax请求等等。

同步和异步是一个比较早的概念,大抵在操作系统发明时应该就出现了。举一个最简单的生活中的例子,比如发短信的情况会比较好说明他们的区别:
同步:正在处于苦逼工作状态中的我,但狗屎运的交到了女朋友并正处于处于热恋期,因此发送短信给她询问那个餐厅吃饭,急不可耐的看着手机等待短信回复,收到信息看完是否加班或者下班;
异步:正处于公司运营决策关键工作状态中的你,不可以被打断太久,随便发送了一条询问家人什么时候做好晚饭然后吃饭的短信后立马返回工作,一边工作一边等待短信回复通知,根据通知决定是否再工作或者下班。
由此可以看出,同步和异步的特点是:
至少在两个对象之间需要协作;
两个对象都需要处理一系列的事情(工作和吃饭)。 另一个类似的关于CPU计算和磁盘操作编的例子: 同步:CPU需要计算10个数据,每计算一个结果后,将其写入磁盘,等待写入成功后,再计算下一个数据,直到完成。 异步:CPU需要计算10个数据,每计算一个结果后,将其写入磁盘,不等待写入成功与否的结果,立刻返回继续计算下一个数据,计算过程中可以收到之前写入是否成功的通知,直到完成。

借用菜鸟教程的http://www.runoob.com/ 中http://www.runoob.com/nodejs/nodejs-callback.html可以有一点了解

/**
 * 读取模板模块
 */
const fs = require('fs');
const getHtml =function(filename){
    return new Promise(function(resolve,reject){
        fs.readFile(filename, 'utf8', function(err, data){
            if (err) throw err;
            resolve(data); 
        });
    })
}
//用Promise 配合Await可以调用回调函数中产生的值=>通过resolve返回值

下面是基于koa、koa-router、基础下读取的并回调取值的例子

router.get(path,async ctx =>{
            let html = await getHtml(filename);
            /* 同步读取法 */
            // let html = fs.readFileSync(file,'utf-8')
            console.log("file is readed");
            ctx.body = html;
        });

和其他语言的思维不能混淆呀!

未经允许不得转载:日常笔记 » NODE学习笔记三-异步函数回调使用Async、Await、Promise使用