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

使用nodeAPI時(shí)遇到過異步問題解決

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

問題

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

問題大致是這樣:

下面這段代碼, 是希望輸出456的, 但實(shí)際上卻輸出了[], 因?yàn)閞eadFile的回調(diào)會(huì)等到文件讀取完成才會(huì)執(zhí)行, readFile不會(huì)阻塞代碼運(yùn)行, 因此return demo會(huì)先執(zhí)行, 此時(shí)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)格, 同時(shí)我們結(jié)合async/await可以進(jìn)一步簡(jiǎ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)建了一個(gè)Promise, 在readFile的回調(diào)函數(shù)執(zhí)行時(shí)我們r(jià)esolve它, 這時(shí)Promise才算結(jié)束

  • 我們還可以之間讓readFileFn返回一個(gè)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編程,更加鼓勵(lì)使用新方案,他們完全可以和以前的回調(diào)函數(shù)方案兼容。

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

相關(guān)文章

最新評(píng)論