ノード js の非同期パターン

2022 ワード

ノード js 内のコードは、その前のコード行の実行を停止しないようにノンブロッキングにする必要があります.時間がかかる可能性がある機能の実装は、その関数の実行部分をメイン ループから取り出すために非同期で行われます.
3 つの非同期パターンがあります.

1.コールバック
コールバックは、別の関数に引数として渡される関数であり、非同期作業が終了するたびに呼び出す必要があります.

const { readFile } = require('fs')
console.log('start of program')
readFile('./myFile.txt', 'utf-8', (err, myfile) => {
  if(err) {
console.log(err)
    return
}
console.log(myFile)
})
console.log('End of program')


readfile 関数は非同期であるため、関数がバックグラウンドで実行されている間、プログラムは次の命令に進みます.
出力は次のとおりです.

start of program
End of program
content inside the text file myFile


  • 約束
    promise オブジェクトは、結果 (成功または失敗) に関係なく、非同期操作の最終的な完了を表します.また、作成時に必ずしも知られていない値のプロキシとしても定義されます.

  • const { readFile } = require('fs')
    const readMyFile = (path) => new Promise((resolve, reject) => {
      readFile(path, 'utf-8', (err, context) => {
        if (err) {
          console.log(err)
          return
    }
    else {
       console.log(context)
    }
    
    })
    })
    readMyFile('./files/myFile.txt')
    .then((result) => console.log(result)
    .catch((err) => console.log(err)
    


    promise は、次のいずれかの状態で存在できます.
    保留 - これは、解決も拒否もされていない初期状態です.

    Fulfilled - 操作が正常に完了した場合、Promise はこの状態になります.

    Rejected - 操作が失敗したときの状態.

    約束する



    この関数は Node の util モジュールで標準として定義されており、その目的は callback を promise に変換することです.

    const { readFile } = require('fs')
    const util = require('util')
    const readMyFile = util.promisify(readFile)
    
    async function start() {
      try {
          const myText = await readMyFile('./myFile', 'utf-8')
          console.log(myText)
       }
     catch (error) {
       console.log(error)
       }
    }
    
    


  • 非同期/待機
    親メソッドが async キーワードで宣言され、その中に await キーワードがあるメソッドは許可されます.