GithubHelp home page GithubHelp logo

Node.jsについて about self-study HOT 3 OPEN

Yuya-Furusawa avatar Yuya-Furusawa commented on September 2, 2024
Node.jsについて

from self-study.

Comments (3)

Yuya-Furusawa avatar Yuya-Furusawa commented on September 2, 2024

Node.jsの特徴

Node.jsはJavaScriptの実行環境。
大きな特徴はイベントループによる並行処理を実現しているという点。

並行処理とは複数の処理を同時に行うことを指す(対義語は逐次処理)。
イベントループとは一連の処理を複数の処理に分割し、シングルスレッドで実行すること。

イベントループによる並行処理はスレッドセーフへの配慮も不要で柔軟に制御できるが、
非同期プログラミングを使って並行処理の方法を記述する必要がある。

参照

from self-study.

Yuya-Furusawa avatar Yuya-Furusawa commented on September 2, 2024

Node.jsにおける非同期プログラミング

①コールバック関数
非同期処理を行う関数に引数として渡したコールバックが処理完了時に実行される
コールバックの実行が状況によって同期的に実行されたり非同期的に実行されてはいけない(直感的でないので)
コールバックヘルに注意

//1秒後にコールバックが実行される
// その間、他の処理を行う事ができる
function parseJSONAsync(json, callback){
  setTimeout(() => {
    try {
      callback(null, JSON,parse(json)) //コールバック
    } catch (err) {
      callback(err)
    }
  }, 1000)
}

②Promise
Promiseは非同期処理の状態と結果を表現するオブジェクト
処理の結果が未確定のときはpending、処理に成功したときはfulfilled、処理に失敗したときはrejected
処理の結果も保存する

//1秒後にJSONをパース
function parseJSONAsync(json){
  //Promiseインスタンスの作成(状態はまだpending)
  return new Promise((resolve, reject) =>
    setTimeout(() => {
      try {
        //fulfilled状態に
        resolve(JSON.parse(json))
      } catch (err) {
        //rejected状態に
        reject(err)
      }
    }, 1000)
  )
}

Promiseを使うと次のようなメソッドが使えてこれがかなり便利

  • .then():Promiseがfulfilledまたはrejectedになったときに実行される(それぞれの状態に応じて処理を決められる)
  • .catch():Promiseがrejectedまたは.then()の処理が失敗したときに実行される
  • .finally():Promiseがfulfilledまたはrejectedになったときに実行される(常に実行される)
//getImageはfileからimageを取り出す非同期処理を行うPromise
getImage(file)
  .then(image => console.log(image)) //取り出せたときに実行
  .catch(error => console.log(error)) //取り出せなかったときに実行
  .finally(() => console.log('All done!')) //とにかく実行

これによりコールバック関数のときに比べてコールバックヘルを回避できる。これは.then()などで逐次処理ができることに由来する。
処理の結果をオブジェクトとして持つので、それを引数などとして再利用可能。

③async/await
async/awaitを使うとより直感的に書くことができる

//再掲
function parseJSONAsync(json){
  return new Promise((resolve, reject) =>
    setTimeout(() => {
      try {
        resolve(JSON.parse(json))
      } catch (err) {
        reject(err)
      }
    }, 1000)
  )
}
async function asyncFunc(json) {
  try {
    const result = await parseJSONAsync(json)
    console.log('パース結果', result)
  } catch (err) {
    console.log('エラーをキャッチ', err)
  }
}

async/awaitはPromiseインスタンスのネストを防ぐことができる。
awaitキーワードはasync関数を一時停止させるイメージ。

参照

from self-study.

Yuya-Furusawa avatar Yuya-Furusawa commented on September 2, 2024

nodeのバージョンを下げる

  • nodebrewを使うと簡単にnodeのバージョンを変更することができる
  • ただしhomebrewを使って既にnodeをインストールしてるので一回uninstallする必要があって面倒
  • nというnpmパッケージをグローバルインストールして使う
  • ただしnodeコマンドのPATHを変更する必要あり
    • /usr/local/bin/opt/homebrew/bin

参照

from self-study.

Related Issues (11)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.