nodejs

2021-01-18 02:14

阅读:429

标签:最快   file   的区别   nod   reject   面试   窗口   node   ack   

 

# day02         2020.07.21

## node简介
1. nodejs

    node是基于Chrome V8引擎运行JavaScript的运行环境。

2. 安装nodejs
    - 2.1
        http://nodejs.org

    - 2.2 卸载更新
        - 删除c盘的nodejs文件
        - 删除c盘/user/用户名/appData/Roaming/npm
         
3. 运行方式 
    + 黑窗口 REPL
    + 命令运行 node js文件的名称

4. nodejs组成
    - ECMAScript 核心
    - 全局成员  console setTimeout...
    - 系统模块  fs path http...

## fs模块

### 1. 读取文件
```js
    fs.readFile(‘path‘[,option],‘callback‘)
```

+ path   读取的文件的位置  

+ options 可选的参数默认为  null 其实是 buff   

+ callback  回调函数  

  err   读取的错误信息

  data  读取的数据 

- 1.1 example 

    ```js
    const fs=require(‘fs‘);
    fs.readFile(‘./nodejs.md‘,‘utf8‘,(err,dataBuff)=>{
        if(err)return console.log(err);
        console.log(dataBuff);
    })
    ```

### 2.写入文件

- 2.1 
    ```js
    fs.writeFile(path,data[,options],callback)
    ```

- 2.2 example
    ```js
     fs.writeFile(‘./2.txt‘,‘神探夏洛克什么时候更新???‘,err=>{
        if(err)throw err;
        console.log(‘写入成功‘);
    })
    ```

### 3.文件拷贝
- 3.1 原始方式拷贝文件,先读取然后写入,注意循环的嵌套!

    ```js
     const fs=require(‘fs‘);
    fs.readFile(‘./nodejs.md‘,‘utf8‘,(err,dataBuff)=>{
        if(err)return console.log(err);
        console.log(dataBuff);
        fs.writeFile(‘./2.txt‘,dataBuff,err=>{
            if(err)throw err;
            console.log(‘写入成功‘);
        })
        
    })
    ```

- 3.2
    ```js
    fs.copyFile(src,dest[,flags],callback)
    ```
    - src 拷贝文件源
    - dest 拷贝到哪个文件
    - flags 可选,是否拷贝
    - callback 拷贝回到函数err

- example

    ```js
    const fs=require(‘fs‘);
    fs.copyFile(‘./nodejs.md‘,‘./2.txt‘,err=>{
        if(err) throw err;
        console.log(‘拷贝成功‘);
    })
    ```

### 4.文件插入
```js
    fs.appendFile(path,data[,options],callback)
```
    - path 读取路径
    - data 要写入的数据
    - options 可选,默认utf-8
    - callback 回调函数err


## path
1. path.join()  

```js

  // 拼接一个绝对路径    
  // 这个有限制拼接格式一定不能加 ./ 少了 ./  
  const abspath = __dirname + ‘/files/1.txt‘

  // 建议使用path.join()   
  const abspath = path.join(__dirname,‘./files/1.txt‘)

```

## 异步和同步的区别 

同一个时间内能够处理事情  

同步可以处理 一个  如: 打电话 

异步可以处理 多个  如: qq聊天

## 回调函数
- 所谓的回调函数就是参数的传递
    ```js
    function getData(callback){
        setTimeout(function(){
            var a=1;
            callback(a);
        },1000)
    }
    getData(function(res){
        console.log(res);
    })
    ```
- Promise解决回调地狱
    ```js
    function getData(path){
        return new Promise((resolve,reject)=>{
            fs.readFile(path,‘utf8‘,(err,data)=>{
                if(err)return reject(err);
                resolve(data);
            })
        })
    }

    // getData(‘./files/1.txt‘)
    //   .then(res => {
    //     console.log(res)
    //     return getData(‘./files/2.txt‘)
    //   })
    //   .then(res => {
    //     console.log(res)
    //     return getData(‘./files/3.txt‘)
    //   })
    //   .then(res => {
    //     console.log(res)
    //   })
    ```
## promise    

### 面试7连击  

#### 1. 什么是回调函数  
- 回调函数就是在一个函数内把另一个函数作为参数调用!实际是参数的传递
-  所谓的回调函数就是参数的传递,在一个函数内部调用另一个函数,调用的同时可以把内部函数的数据传递出来  

#### 2. 回调函数的使用场景  
- 为什么使用回调函数 ?  异步请求的时候无法立刻获取到具体的值

#### 3. 回调函数多层嵌套的时候存在什么问题

- 回调地狱,不好理解也不好维护!

    ```js
    const fs = require(‘fs‘)


    function getData(path, succCallback, errCallback) {
        fs.readFile(path, ‘utf8‘, (err, data) => {
            if (err) return errCallback(err)
            succCallback(data)
        })
        }

        getData(‘./files/1.txt‘, function (res) {
        console.log(res)
        getData(‘./files/2.txt‘, function (res) {
            console.log(res)
            getData(‘./files/3.txt‘, function (res) {
            console.log(res)
            })
        })
    })
    ```

#### 4. 如何解决回调地狱   
- Promise
#### 5. 使用promise 解决回调地狱    

#### 6. promise 的特性  

  - promise 是一个构造函数,也是一个对象  

  - 该构造函数中需要 传递2个参数 resolve 成功的回调  reject失败的回调   

  - promise 的原型上有一个 then 函数  

#### 7. promise 有什么缺点,如何解决  

  + 代码量增多

  + Promise.all 

  - 使用es7 的 async await 

  ```js
    const fs = require(‘fs‘)

    function getData(path) {
    return new Promise((resolve, reject) => {
        fs.readFile(path, ‘utf8‘, (err, data) => {
        if (err) return reject(err)
        resolve(data)
        })
    })
    }


    // Promise.all([getData(‘./files/1.txt‘), getData(‘./files/2.txt‘), getData(‘./files/3.txt‘)]).then(res => {
    //   console.log(res)
    // })

    // 谁执行最快打印谁的结果,其他不执行 
    // Promise.race([getData(‘./files/1.txt‘), getData(‘./files/2.txt‘), getData(‘./files/3.txt‘)]).then(res => {
    //   console.log(res)
    // })


    // es7  async await  

    // async 和 await 必须配合使用
    async function getFileData() {
    const data1 = await getData(‘./files/1.txt‘)
    const data2 = await getData(‘./files/2.txt‘)
    const data3 = await getData(‘./files/3.txt‘)
    console.log(data1)
    console.log(data2)
    console.log(data3)
    }

    getFileData()
```

nodejs

标签:最快   file   的区别   nod   reject   面试   窗口   node   ack   

原文地址:https://www.cnblogs.com/spiderMan-0601/p/13355068.html


评论


亲,登录后才可以留言!