欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用nodeAPI時遇到過異步問題解決

 更新時間:2023年01月28日 16:01:40   作者:舉案  
這篇文章主要為大家介紹了使用nodeAPI時遇到過異步問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

問題

閑逛技術(shù)群時常??吹饺河延龅疆惒絾栴}, 這里就最近看到的問題做個解答:

問題大致是這樣:

下面這段代碼, 是希望輸出456的, 但實(shí)際上卻輸出了[], 因?yàn)閞eadFile的回調(diào)會等到文件讀取完成才會執(zhí)行, readFile不會阻塞代碼運(yùn)行, 因此return demo會先執(zhí)行, 此時demo值為[].

const fs = require('fs')
const readFileFn = () => {
	let demo = []
  fs.readFile('./config.json', async function (err, date) {
    Promise.all([Promise.resolve(() => 456)]).then(res => {
      demo = res
    })
  })
  return demo
}
console.log('end', readFileFn()) // 要輸出456

很典型的異步問題, 解決方法也由不少, 我們來探討一下:

  • 既然readFile提供回調(diào)函數(shù)來執(zhí)行讀完文件后的操作, 我們同樣可以提供回調(diào)函數(shù)來執(zhí)行readFile結(jié)束后的操作:
const fs = require('fs')
const readFileFn = (callback) => {
  fs.readFile('./config.json', async function (err, date) {
    Promise.all([Promise.resolve(456)]).then(res => {
      callback(res)
    })
  })
}
readFileFn(data => console.log(data)) // [ 456 ]
  • 現(xiàn)代JS編程似乎更傾向于Promise風(fēng)格, 同時我們結(jié)合async/await可以進(jìn)一步簡化代碼
const fs = require('fs')
const readFileFn = async () => {
  const [result] = await Promise.all([
    new Promise(resolve => fs.readFile('./config.json', (err, data) => resolve(456))),
  ])
  return result
}
readFileFn().then(res => console.log(res)) // 456

這里我們創(chuàng)建了一個Promise, 在readFile的回調(diào)函數(shù)執(zhí)行時我們resolve它, 這時Promise才算結(jié)束

  • 我們還可以之間讓readFileFn返回一個Promise
const readFileFn = () => {
  return new Promise(resolve => {
    fs.readFile('./config.json', async function (err, date) {
      Promise.all([Promise.resolve(456)]).then(res => {
        resolve(res)
      })
    })
  })
}
readFileFn().then(console.log) // [456]
// readFileFn().then(res => console.log(res))

總結(jié)

在node中有很多類似于readFile的API, 他們采用回調(diào)函數(shù)的方式實(shí)現(xiàn)異步, 因?yàn)樵谝郧? 回調(diào)函數(shù)被用來實(shí)現(xiàn)異步, 之后出現(xiàn)了諸如Promise, async/await這樣的異步方案,現(xiàn)代的JS編程,更加鼓勵使用新方案,他們完全可以和以前的回調(diào)函數(shù)方案兼容。

以上就是使用nodeAPI時遇到過異步問題解決的詳細(xì)內(nèi)容,更多關(guān)于nodeAPI異步問題的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論