日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

nodeJS中的异步编程

發布時間:2023/12/10 javascript 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nodeJS中的异步编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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({host: 'localhost',user: 'root',password: 'root',database: 'nodeblog' });//開始連接 connection.connect();//查詢所有數據 let sql = 'SELECT * FROM student' connection.query(sql, (err, result) => {if (err) {console.log('sorry');return;}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 => {return new Promise((resolve, reject) => {fs.readFile(path, 'utf8', (err,data) => {resolve(data)})}) }read(a).then(data => {console.log(data)return read(b) }).then(data => {console.log(data)return read(c) }).then(data => {console.log(data) })

OK

總結

以上是生活随笔為你收集整理的nodeJS中的异步编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。