Nodejs異步編程

Node.js異步編程
同步API:只有當前API執行完成後,才能繼續執行下一個API;
         異步API:當前API的執行不會阻塞後續代碼的執行。編程

   區別:同步API能夠從返回值中拿到API執行結果,異步不行。promise

在異步API中使用回調函數獲取執行結果:
function getMsg(callback) {
    setTimeout(function () {
       callback({
           msg:'ALOHA'
       })
    },2000)
}異步

getMsg(data => console.log(data))異步編程

     

 

 

    區別:執行順序函數

同步:從上到下依次執行,前面代碼會阻塞後面代碼的執行。
異步:不會等待API執行完成後再向下執行代碼。
 ui

Promise
Promise出現的目的是解決Node.js異步編程中回調地域的問題(即嵌套多重函數)。blog

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

    setTimeout(()=>{回調函數

       if(true){同步

           resolve({name:'張三'})

       }else {

           reject('失敗了')

       }

    },2000)

});

promise.then(result=>console.log(result))
.catch(error =>console.log(error));
分離異步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)

})
項目實戰
const fs = require('fs');

/* //callbackhellfs.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) })

相關文章
相關標籤/搜索