久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

聊聊Node.js中怎么用async函數

聊聊Node.js中怎么用async函數

借助于新版 V8 引擎,Node.js 從 7.6 開始支持 async 函數特性。今年 10 月 31 日,Node.js 8 也開始成為新的長期支持版本,因此你完全可以放心大膽地在你的代碼中使用 async 函數了。在這邊文章里,我會簡要地介紹一下什么是 async 函數,以及它會如何改變我們編寫 Node.js 應用的方式。

什么是 async 函數

利用 async 函數,你可以把基于 Promise 的異步代碼寫得就像同步代碼一樣。一旦你使用 async 關鍵字來定義了一個函數,那你就可以在這個函數內使用 await 關鍵字。當一個 async 函數被調用時,它會返回一個 Promise。當這個 async 函數返回一個值時,那個 Promise 就會被實現;而如果函數中拋出一個錯誤,那么 Promise 就會被拒絕。【相關教程推薦:nodejs視頻教程、編程教學】

await 關鍵字可以被用來等待一個 Promise 被解決并返回其實現的值。如果傳給 await 的值不是一個 Promise,那它會把這個值轉化為一個已解決的 Promise。

const rp = require('request-promise') async function main () {  const result = await rp('https://google.com')  const twenty = await 20  // 睡個1秒鐘  await new Promise (resolve => {   setTimeout(resolve, 1000)  })  return result } main()  .then(console.log)  .catch(console.error)
登錄后復制

向 async 函數遷移

如果你的 Node.js 應用已經在使用Promise,那你只需要把原先的鏈式調用改寫為對你的這些 Promise 進行 await。

如果你的應用還在使用回調函數,那你應該以漸進的方式轉向使用 async 函數。你可以在開發一些新功能的時候使用這項新技術。當你必須調用一些舊有的代碼時,你可以簡單地把它們包裹成為 Promise 再用新的方式調用。

要做到這一點,你可以使用內建的 util.promisify方法:

const util = require('util') const {readFile} = require('fs') const readFileAsync = util.promisify(readFile) async function main () {  const result = await readFileAsync('.gitignore')  return result } main()  .then(console.log)  .catch(console.error)
登錄后復制

Async 函數的最佳實踐

在 express 中使用 async 函數

express 本來就支持 Promise,所以在 express 中使用 async 函數是比較簡單的:

const express = require('express') const app = express() app.get('/', async (request, response) => {  // 在這里等待 Promise  // 如果你只是在等待一個單獨的 Promise,你其實可以直接將將它作為返回值返回,不需要使用 await 去等待。  const result = await getContent()  response.send(result) }) app.listen(process.env.PORT)
登錄后復制

但正如 Keith Smith 所指出的,上面這個例子有一個嚴重的問題——如果 Promise 最終被拒絕,由于這里沒有進行錯誤處理,那這個 express 路由處理器就會被掛起。

為了修正這個問題,你應該把你的異步處理器包裹在一個對錯誤進行處理的函數中:

const awaitHandlerFactory = (middleware) => {  return async (req, res, next) => {   try {    await middleware(req, res, next)   } catch (err) {    next(err)   }  } } // 然后這樣使用: app.get('/', awaitHandlerFactory(async (request, response) => {  const result = await getContent()  response.send(result) }))
登錄后復制

并行執行

比如說你正在編寫這樣一個程序,一個操作需要兩個輸入,其中一個來自于數據庫,另一個則來自于一個外部服務:

async function main () {  const user = await Users.fetch(userId)  const product = await Products.fetch(productId)  await makePurchase(user, product) }
登錄后復制

在這個例子中,會發生什么呢?

你的代碼會首先去獲取 user,

然后獲取 product,

最后再進行支付。

如你所見,由于前兩步之間并沒有相互依賴關系,其實你完全可以將它們并行執行。這里,你應該使用 Promise.all 方法:

async function main () {  const [user, product] = await Promise.all([   Users.fetch(userId),   Products.fetch(productId)  ])  await makePurchase(user, product) }
登錄后復制

而有時候,你只需要其中最快被解決的 Promise 的返回值——這時,你可以使用 Promise.race 方法。

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
日本久久成人网| 久久一区视频| 久久蜜桃资源一区二区老牛| 美女视频一区在线观看| 911精品国产| 青青草国产成人99久久| 亚洲va久久久噜噜噜久久| 日韩一区精品视频| 伊人www22综合色| 婷婷成人av| 中文字幕日韩亚洲| 日韩欧美中文字幕在线视频| 亚洲精品九九| 国产丝袜一区| 国产精品极品| 国产成人久久| 日本久久成人网| 黑丝一区二区| 一区二区三区国产在线| 日韩黄色免费网站| 国产欧美日韩免费观看| 久久尤物视频| 日本精品影院| 亚洲欧美综合| 亚洲精品在线国产| 亚洲精品观看| 国产精品白浆| 深夜视频一区二区| 日韩中文字幕区一区有砖一区| 日产欧产美韩系列久久99| 日本天堂一区| av资源中文在线天堂| 久久精品国产亚洲夜色av网站| 中国女人久久久| 国产毛片精品| 日韩中文影院| 亚洲精品精选| 国产不卡一区| 国产手机视频一区二区| 欧美亚洲tv| 97人人精品| 国产麻豆综合| 麻豆精品在线观看| 亚洲一级二级| 日本欧美久久久久免费播放网| 国产精品红桃| 欧美成人高清| 99精品在线免费在线观看| 日韩一区二区在线免费| 伊人影院久久| 日韩精品午夜视频| 久久男人av| 久久三级视频| 国产一区欧美| 免费人成在线不卡| 亚洲区欧美区| 老色鬼精品视频在线观看播放| 美女福利一区二区三区| 欧美精品一区二区久久| 亚洲精品视频一二三区| 婷婷成人av| 手机在线电影一区| 午夜国产一区二区| 日韩av一二三| sm捆绑调教国产免费网站在线观看 | 天堂va在线高清一区| 久久国产精品毛片| 欧美精品国产一区| 国产福利电影在线播放| 欧美日韩国产亚洲一区| 日韩精品视频一区二区三区| 精品国产欧美| 国产精品日本欧美一区二区三区| 久久一区二区中文字幕| 亚洲精品1区| 久久久久久久久99精品大| 亚洲色图综合| 国产不卡精品| 美女日韩在线中文字幕| 国产欧美三级| 亚洲国产专区| 日本中文字幕一区二区视频| 97在线精品| 色8久久久久| 久久九九国产| 国产精品亚洲综合久久| 亚洲国内欧美| 国产精品扒开腿做爽爽爽软件| 99视频精品| 成人在线视频中文字幕| 在线免费观看亚洲| 性欧美videohd高精| 日本中文字幕一区二区| 久久精品免费一区二区三区 | 亚洲天堂av影院| 免费黄网站欧美| 精品资源在线| 国产午夜一区| 日韩精品一级二级| 成人日韩在线| 国产欧美另类| 免费日韩一区二区| 欧美13videosex性极品| 国产美女久久| 午夜在线一区二区| 日本а中文在线天堂| 日本欧美久久久久免费播放网| 国产中文在线播放| 国产精品视频一区二区三区四蜜臂| 久久久久午夜电影| 里番精品3d一二三区| 亚洲丝袜啪啪| 欧美福利专区| www.九色在线| 国产精品一区二区免费福利视频| 在线亚洲国产精品网站| 蜜臀国产一区| 黄色网一区二区| 日韩成人精品一区二区三区| 欧美成人亚洲| 91看片一区| 欧美a一区二区| 亚洲美洲欧洲综合国产一区| 激情久久五月| 伊人久久在线| 精品久久久久中文字幕小说| 欧美一区不卡| 亚久久调教视频| 亚洲午夜国产成人| 丝袜国产日韩另类美女| 亚洲欧洲一区| 欧美日韩三区| 伊人久久婷婷| 欧美日韩国产一区精品一区| 久久人人97超碰国产公开结果| 成人国产精品一区二区网站| 日韩中文一区二区| 亚洲欧洲高清| 成人午夜亚洲| 精品欠久久久中文字幕加勒比| 国产精品亚洲综合色区韩国| 日韩福利视频网| 91精品日本| 日韩精品一区第一页| 香蕉视频成人在线观看| 亚洲欧美日韩视频二区| 国产农村妇女精品一二区| 黄色av日韩| 久久av在线| 麻豆成人在线| 丝袜亚洲另类欧美| 中文视频一区| 亚洲一区二区三区免费在线观看| 精品一区在线| 香蕉精品999视频一区二区| 亚洲欧美日韩国产一区| 91久久国产| 亚洲精品亚洲人成在线观看| 视频一区中文字幕精品| 青青伊人久久| 久久精品99国产精品| 国产精品久久久久久妇女| 国产精品毛片久久久| 欧美a一区二区| 岛国av在线网站| 久久精品国产大片免费观看| 五月天久久777| 不卡一区综合视频| 九一国产精品| 视频一区中文字幕国产| 日韩在线a电影| 亚洲精品动态| 国产精久久一区二区| 精品视频一区二区三区在线观看| 韩日一区二区| 91精品一区二区三区综合| 国产精品av久久久久久麻豆网| 制服诱惑一区二区| 日韩一二三区在线观看| 国产欧美一区二区精品久久久| 精品中文字幕一区二区三区四区| 欧美成人高清| 久久av一区| 国产精品美女在线观看直播| 日本不卡免费高清视频在线| 亚洲激情中文| 欧美日韩一视频区二区| 粉嫩av一区二区三区四区五区| av资源亚洲| 日韩一区二区三区精品| 久久99国产精品视频| 亚洲午夜一级| 日韩精品欧美大片| 正在播放日韩精品| 男女男精品网站| 久久av网站| 91成人精品视频| 亚洲精品三级| 国产成人精选| 久久一二三区|