zoukankan      html  css  js  c++  java
  • 09-Node.js学习笔记-异步编程

    同步API,异步API

    同步API:只有当前API执行完成后,才能继续执行下一个API

    ``` console.log('before'); console.log('after'); ```

    异步API:当前API的执行不会阻塞后续代码的执行

    ``` console.log('before'); setTimeout(function(){ console.log('last') },2000) console.log('after'); ```

    同步API,异步API的区别(获取返回值)

    同步API可以从返回值中拿到API执行的结果,但是异步API不可以的

    回调函数

    自己定义函数让别人去调用

    ``` function getData(callback){ callback() } getData(function(){ console.log('callback函数被调用了') }) ``` ``` function getData(callback){ callback('糖糖糖') } getData(function(n){ console.log('callback函数被调用了') console.log(n) }) ``` ``` function getMsg(callback){ setTimeout(function(){ callback({ msg:'hello node.js' }) },2000) } getMsg(function(data){ console.log(data) }) ```

    同步API,异步API的区别(代码执行顺序)

    同步API从上到下依次执行,前面代码会阻塞后面代码的执行

    异步API不会等待API执行完成后再向下执行代码

    Promise

    Promise 出现的目的是解决Node.js异步编程中回调地狱的问题

    ``` let promise = new Promise((resolve,reject)=>{ setTimeout(()=>{ if(true){ resolve({name:'林一一'}) }else{ reject('失败了') } },2000); }); promise.then(result=>console.log(result);//{name:'林一一'}) .catch(error=>console.log(error);//失败了) ``` ``` //回调地狱 const fs = require('fs'); fs.readFile('./1.txt','utf8',(err,result1)=>{ console.log(result1) fs.readFile('./2.txt','utf8',(err,result2)=>{ console.log(result2) fs.readFile('./3.txt','utf8',(err,result3)=>{ console.log(result3) }) })

    })
    //promise解决回调地狱
    const fs = require('fs');
    function p1(){
    return new Promise((resolve,reject)=>{
    fs.readFile('./1.txt','utf8',(err,result)=>{
    resolve(result);
    })
    })
    }
    function p2(){
    return new Promise((resolve,reject)=>{
    fs.readFile('./2.txt','utf8',(err,result)=>{
    resolve(result);
    })
    })
    }
    function p3(){
    return new Promise((resolve,reject)=>{
    fs.readFile('./3.txt','utf8',(err,result)=>{
    resolve(result);
    })
    })
    }

    p1().then((r1)=>{
    console.log(r1)
    return p2()
    }).then((r2)=>{
    console.log(r2)
    return p3()
    }).then((r3)=>{
    console.log(r3)
    })

    const fs = require('fs');
    let promise = new Promise((resolve,reject)=>{
    fs.readFile('./100.txt','utf8',(err,result)=>{
    if(err !=null){
    reject(err);
    }else{
    resolve(result);
    }
    })
    })
    promise.then((result)=>{
    console.log(result);
    }).catch((err)=>{
    console.log(err)
    })

  • 相关阅读:
    扩大可点击区域
    CSS 选中奇偶子元素
    homebrew 常用命令
    移动端半像素 0.5PX 边框实现。
    node-sass环境
    jq插件的编写方法(自定义jq插件)---转
    面向对象的三个基本特征
    Java中数据类型转换
    Java 8种基础数据类型
    Java中数据类型转换
  • 原文地址:https://www.cnblogs.com/foreverLuckyStar/p/12072683.html
Copyright © 2011-2022 走看看