導學:通過返回值拿結果
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...