Node教程 非同步API

2022-07-05 08:48:12 字數 3461 閱讀 3566

導學:通過返回值拿結果

path.join()

通過函式拿結果,fs.redfile~

在node中有兩種api

同步的api還有非同步的api

同步所謂的同步就是一步一步的走

非同步當前的api不會堵塞後續的**的執行

對比

不能通過返回值拿結果

這裡舉例說明

讀取檔案的操作是非同步的

fs.readfile('./demo.txt',( err,result )=>)
事件監聽也是非同步的

// ....當然了我們還有很多的非同步api,這裡不一一枚舉

如果非同步後面的api依賴前面的api的執行結果怎麼辦??

//這裡的**,旨在依次的讀取 a b c三個檔案

const fs = require('fs');

//通過**函式依次的執行,這個是不可維護的**,****,再**=哭了,**地獄

fs.readfile('./1.txt', 'utf8', (err, result1) => )

})});

解決2:promise物件 ,解決非同步**的問題,以下來看看使用的步驟

簡單的使用

const fs = require('fs');

// 說明「1. 非同步api的結果與非同步相分離

// 說明「2. resolve reject都是兩個函式,第一乙個把正確的結果丟到外面出去。第二個就是把失敗的結果丟到外面去

//1.例項化物件

let promise = new promise(

//2.例項化的時候把匿名函式弄進去

(resolve, reject) => else

});});

// 說明「3. 通過the方法,把 resolve reject接過來

//3.在外面接受結果

promise.then((result) => )

.catch((err) => )

看看我們怎麼解決之前的**地獄問題

//1.例項化物件,注意我們要保證依次的執行就需要放在函式裡面

// let p1 = new promise((resolve, reject) => )

// })

// let p3 = new promise((resolve, reject) => )

// })

// let p1 = 3 = new promise((resolve, reject) => )

// })

// function p1() )

// })

// }

// function p2() )

// })

// }

// function p3() )

// })

// } 預設函式返回undefined.then???

// 細節,只有我們的promise物件才能.then啥啥啥的。我的意思是只有 promise物件才行執行它應該有的操作,所以你需要在函式裡面把promise返回出來

function p1() )

});}function p2() )

});}function p3() )

});}// 2. 在外面接收,處理

// 這裡的r1 r1是接受的乙個形引數,相當與r1 = 非同步的結果,這樣子的**是不純在巢狀的

p1().then((r1) => )

//鏈式程式設計,直接點選then

.then((r2) => )

.then((r3) => )

不過,現在又有問題了,我還是覺得這個**太複雜的,我們有沒有什麼方式,把非同步的寫成同步的樣子。我的意思是說。我想讓我的非同步**看起來像同步**一樣,因為我看起來舒服。看起來簡單明瞭。

解決:非同步函式,async,在普通的函式前加乙個這個關鍵字 ,我們的函式就變成非同步的了

語法**演示:

// 1.在普通函式定義的前面加上async關鍵字 普通函式就變成了非同步函式

// 2.非同步函式預設的返回值是promise物件不是undecided!!!

// 3.在非同步函式內部使用throw關鍵字進行錯誤的丟擲

// // await關鍵字

// 1.它只能出現在非同步函式中

// 2.await promise 它可以暫停非同步函式的執行 等待promise物件返回結果後再向下執行函式

// async function fn ()

// // console.log(fn ())

// fn ().then(function (data) ).catch(function (err))

async function p1()

async function p2()

async function p3()

//通過非同步函式再去乙個乙個的跑出來!

async function run()

run();

總結:

await關鍵字

解決之前的讀取檔案的

const fs = require('fs');

// 1. 改造現有非同步函式api 讓其返回promise物件 從而支援非同步函式語法,非同步語法去包裝原來的非同步api返回的結果

const promisify = require('util').promisify; //用乙個變數去獲得這個 promisify 方法

// 2. 呼叫promisify方法改造現有非同步api 讓其返回promise物件

//我們看一下到底拿到了什麼鬼東西

console.log(promisify);

//const readfile = promisify(fs.readfile); //這個返回值是乙個promise物件

//我們看一下到底拿到了什麼鬼東西

// [function: readfile],這個就是我們的**

console.log(readfile);

//3.於是乎我們的阿的

async function run()

run();

不知道你有沒有注意到,在學習web api的時候我們說過 我們的 console.log()是window下面,但是我們的node執行中也可以使用,那麼有問題來了,我們的這裡的console.log()是誰的?答案是:global的

接下裡,我們來學習輕量級且強大的mongodb資料庫軟體,還有我們的這個node伺服器開發框架express

node 非同步程式設計

我了解到的node非同步程式設計可分成 1.函式 2.pub sub模式 發布 訂閱模式 3.promise 4.generator 5.async await 一.直接 函式 該方法是最直接常用的非同步操作方式,比如在setinterval 和 ajax等會使用到,存在缺點有 1.不易閱讀並且容易...

Node 非同步I O機制

提到js,可能就免不了單執行緒,事件機制,非阻塞i o,非同步i o等等,這些詞語。不能說理解的有多麼深刻,想談談自己的一些看法。node底層採用chrome v8 j ascript搜尋引擎,其解析的速度快,效能穩定,提供了乙個良好的解析環境。這一節從非同步i o機制來看看node自身的特點。以下...

Node基本API使用2

fs.createreadstream path options fs.createwritestream path options const path require path const fs require fs let spath path.join dirname,03 source f...