Nodejs异步编程相关

Node.js异步编程

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

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

   区别:同步API可以从返回值中拿到API执行结果,异步不行。

  • 在异步API中使用回调函数获取执行结果:
  • function getMsg(callback) {
       
    setTimeout(function () {
           callback({
              
    msg:'ALOHA'
          
    })
        }
    ,2000)
    }


    getMsg(data => console.log(data))

     

    区别:执行顺序

  • 同步:从上到下依次执行,前面代码会阻塞后面代码的执行。
  • 异步:不会等待API执行完成后再向下执行代码。

 

  1. Promise

Promise出现的目的是解决Node.js异步编程中回调地域的问题(即嵌套多重函数)。

  1. 基本使用方法
let promise = new Promise((resolve,reject) =>{

    setTimeout(()=>{

       if(true){

           resolve({name:'张三'})

       }else {

           reject('失败了')

       }

    },2000)

});

promise.then(result=>console.log(result))
.catch(error =>console.log(error));
  1. 分离异步API执行和错误分离
获取本地文件夹内容:const fs = require('fs');

let promise = new Promise((resolve,reject) =>{

    fs.readFile('./1.txt','utf8',(error,result) =>{

        if(error != null){

            reject(error)

        }else {

           resolve(result);

        }

    })

})

promise.then((result) =>{   //then,执行resolve(result)=执行promise.then

    console.log(result)

})

.catch((error) =>{          //链式编程

    console.log(error)

})
  1. 项目实战
const fs = require('fs');

/*  //callbackhell
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);
        })
    })
})*/
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)
    })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值