nodeJS中的非同步程式設計

2021-10-03 18:49:17 字數 1805 閱讀 5072

nodejs 不是單執行緒 在部落格專案中關於非同步問題:

1.當使用者新增一條部落格時 需要通過post方式向伺服器傳送資料 後台獲取使用者以post方式拿到傳送過來的資料 然後存入資料庫:

上面的**:建立乙個空字串 當使用者向伺服器傳送請求時出發data事件將依次獲取來資料進行拼接 當使用者請求結束後出發end事件 將拼接後的字串賦值給req.postdata屬性 理想中的**執行順序如下:

但是**中的data和end事件 都是屬於非同步 so 真正執行如下:

因為同步**優先執行 非同步**等同步**之行結束後再根據規則執行 這就造成後台接收不到傳送的資料

使用promise解決非同步問題:將非同步**放入promise中 將要傳送的資料放到resolve方法中作為引數

當上面**執行完成後才執行下面的then裡面的** 同時也回想resolve中的引數傳到下面的形參result中 在將其賦值給req.postdata 將後續**放在then中

2.當nodejs運算元據庫時也存在非同步:

var mysql = require('mysql');

var connection = mysql.createconnection();

//開始連線

connection.connect();

//查詢所有資料

let sql = 'select * from student'

connection.query(sql, (err, result) =>

console.log(result);

});console.log('查詢結束')

上面**的執行結果為:

說明:雖然查詢學生表的**書寫在前 但是優先輸出「查詢結束」可見後續**不會等到查詢學生表**執行結束後才執行

解決方法:也是通過promise

紅色框內為非同步** 黃色框內為後續**!!!

3.使用promise實現依次讀取檔案:

/**依次讀取檔案

*///拿到abc三個檔案的路徑 使用絕對路徑

const path = require('path')

const fs = require('fs')

let a = path.join(__dirname, '檔案', 'a.txt')

let b = path.join(__dirname, '檔案', 'b.txt')

let c = path.join(__dirname, '檔案', 'c.txt')

let read = path => )

})}read(a).then(data => ).then(data => ).then(data => )

nodejs裡的非同步程式設計

指的有像對檔案的操作 像是觸發的事件等 js引擎中執行的一些普通語句for語句 var語句,普通函式的呼叫啊,它們是首先執行完。才會執行像readfile 這些非同步api。它們具有等待的特點。1.在這些非同步api外面再套一層promise函式,將裡面readfile 執行的結果,作為引數傳遞出去...

nodejs 非同步程式設計async await

參考 在路由js中 router.get function req,res,next router.post async function request,response module.exports router 在路由呼叫的js檔案login.js中 const global require ...

NodeJS中的網路程式設計

3 tcp server 4 結語 5 參考文章 常聽到網路程式設計,自己也有些模糊的概念,或許在 都用到過,只是不知道那是網路程式設計而已,今天花時間來好好理解一下,謹作為筆記行和分享,如果這裡有什麼需要補充或者不對的地方,歡迎道友指正 網路程式設計從大的方面說就是對資訊的傳送到接收,中間傳輸為物...