コールバック
callback
1. コールバック関数
2. こちらから電話をかけ直すこと
ただいま席を外しております、折り返しお電話いたします
折り返しの電話
このページでは1を解説する
https://ja.wikipedia.org/wiki/コールバック_(情報工学)
使い方
code:chottomasi.js
asyncfileread('a.txt', function(fda) {
asyncfileread('b.txt', function(fdb) {
asyncfileread('c.txt', function(fdc) {
asyncfileread('d.txt', function(fdd) {
asyncfileread('e.txt', function(fde) {
asyncfileread('f.txt', function(fdf) {
// something process
})
})
})
})
})
})
ループしたい場合は終了条件を自力で管理して再帰する
メソッドチェーンでやれ定期Mijinko_SD.icon
でもたしかに、引数の()の中に関数の{}を入れることによってインデントが深くなることはよくある
メソッドチェーン版who.icon
code:method_chain.js
asyncfileread("a.txt")
.then((fda) => {
return asyncfileread("b.txt").then((b) => fda, b);
})
.then((fda, fdb) => {
return asyncfileread("c.txt").then((b) => fda, fdb, b);
})
.then((fda, fdb, fdc) => {
return asyncfileread("d.txt").then((b) => fda, fdb, fdc, b);
})
.then((fda, fdb, fdc, fdd) => {
return asyncfileread("e.txt").then((b) => fda, fdb, fdc, fdd, b);
})
.then((fda, fdb, fdc, fdd, fde) => {
return asyncfileread("f.txt").then((b) => fda, fdb, fdc, fdd, fde, b);
})
.then((fda, fdb, fdc, fdd, fde, fdf) => {
console.log(fda,fdb,fdc,fdd,fde,fdf)
});
メソッドチェーンはデータハンドリングがむずい
一番マシなやつ
code:all.js
Promise.all([
asyncfileread("a.txt"),
asyncfileread("b.txt"),
asyncfileread("c.txt"),
asyncfileread("d.txt"),
asyncfileread("e.txt"),
asyncfileread("f.txt")
]).then(fda, fdb, fdc, fdd, fde, fdf => {
console.log(fda,fdb,fdc,fdd,fde,fdf)
});
コールバック関数の存在によって、既存のクラスやメソッドの挙動を簡単にカスタマイズできてとても良いMijinko_SD.icon
もっとマシな書き方とかは考えればあるのかもしれないけれど
逆にコールバックが存在しない言語で同じことをしようとすると結構だるい
既存の処理の内部にちょっと動作を追加しようとしただけで新しいクラスに継承しなきゃいけないのはマジであほくさい
言語の思想によるのではbsahd.icon
コールバックはイベントの受取に便利bsahd.icon
え?処理完了を検知する方法がないから、処理開始から10ms待機して終了時の処理を実行してるんですか…?
onCloseとか無いんですねかわいそうに
sleepで10msごとに処理状態を確認するとかbsahd.icon
見るたびにコールダックが頭を過ぎるcak.icon
引数に渡す関数というのが学びたての時になんか難しく感じた記憶imo.icon