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)
    })

  • 相关阅读:
    itext操作PDF文件添加水印
    【PDF单页转化为图片输出 注意:英文或图片类的PDF可转化,中文抛异常】
    【使用Itext处理PDF文档(新建PDF文件、修改PDF文件、PDF中插入图片、将PDF文件转换为图片)】
    Itext简绍及操作PDF文件
    【将txt文本转图片】
    通用缓存组件
    一个简易的、轻量级的方法并行执行线程辅助类
    学习笔记 android fragment
    某队列积压问题分析、解决
    平衡
  • 原文地址:https://www.cnblogs.com/foreverLuckyStar/p/12072683.html
Copyright © 2011-2022 走看看