Comments (3)
Node.jsの特徴
Node.jsはJavaScriptの実行環境。
大きな特徴はイベントループによる並行処理を実現しているという点。
並行処理とは複数の処理を同時に行うことを指す(対義語は逐次処理)。
イベントループとは一連の処理を複数の処理に分割し、シングルスレッドで実行すること。
イベントループによる並行処理はスレッドセーフへの配慮も不要で柔軟に制御できるが、
非同期プログラミングを使って並行処理の方法を記述する必要がある。
参照
from self-study.
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.
nodeのバージョンを下げる
- nodebrewを使うと簡単にnodeのバージョンを変更することができる
- ただしhomebrewを使って既にnodeをインストールしてるので一回uninstallする必要があって面倒
- nというnpmパッケージをグローバルインストールして使う
- ただしnodeコマンドのPATHを変更する必要あり
/usr/local/bin
←/opt/homebrew/bin
参照
- nodebrew(GitHub)
- n – Interactively Manage Your Node.js Versions
- How to downgrade Node version(StackOverflow)
from self-study.
Related Issues (11)
- React + TypeScript開発で調べたことのまとめ HOT 28
- 開発の進め方に関する学習 HOT 3
- JavaScriptに関して調べたことのまとめ HOT 16
- PATHのお話 HOT 2
- いろいろな概念・用語 HOT 4
- Dockerについて HOT 5
- CSSとか、CSS in JSとか HOT 14
- Terraformについて HOT 4
- AWSとか HOT 3
- GitHub Actionsについて
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from self-study.