[過去ログ] + JavaScript(ECMAScript)質問用スレッド vol.123 + [無断転載禁止]©2ch.net (551レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
260(3): デフォルトの名無しさん [] 2021/02/24(水) 07:02:44.61 ID:6Ovu96Ok(4/11) AAS
外部リンク:qiita.com
この記事面白い
reader('data1.txt')
.then(subReader('data2.txt'))
.then(subReader('data3.txt'))
.then(subReader('data4.txt'))
.then(subReader('data5.txt'))
.then(function(data) {console.log(data)})
この部分はきれいに見えるけど、subReader()の中身どんだけややこしいねんと思ってしまう
綺麗に見える部分もオブジェクトのメンバがどんどん連なってて理解に苦しむ(出来なくはない)
Promiseでやりたいことはわかる
わかるけど、表面的な綺麗さのために裏にやたら複雑な仕組みを忍ばせてる感がある
261(5): デフォルトの名無しさん [sage] 2021/02/24(水) 07:20:08.67 ID:IL+ryHZw(1/3) AAS
>>260
それインターフェースがおかしい
subReaderは、新しいファイル名と前のデータを引数にすべきだろ
最後のconsole.logだってそうなってるんだから
第一どうやって単体テストすんねん
subReaderには前のデータをこうやって渡す
reader('data1.txt')
.then(data => subReader('data2.txt', data))
.then(data => subReader('data3.txt', data))
.then(data => subReader('data4.txt', data))
.then(data => subReader('data5.txt', data))
.then(function(data) {console.log(data)})
.catch(function(error) {console.log(error)})
そうすりゃPromiseを返すだけになる
Promiseを使うプログラミングは
言い換えるとPromiseを返す関数を作ることを意味する
元のsubReaderはPromiseを返していない
function subReader(file, previous) {
return new Promise(function(resolve, reject){
fs.readFile(file, function(error, data){
if (error) reject(error);
resolve(previous + data);
});
});
}
ちなみにここではPromiseを返しているが単なる値を返してもいい所がミソな
Promise or ただの値を変える関数を.thenでつなげていける
267(1): デフォルトの名無しさん [] 2021/02/24(水) 11:25:24.39 ID:6Ovu96Ok(7/11) AAS
>>261
その書き方で言えば
>>260の記事は
reader('data1.txt')
.then(data => (subReader('data2.txt')(data))
.then(data => (subReader('data3.txt')(data))
.then(data => (subReader('data4.txt')(data))
.then(data => (subReader('data5.txt')(data))
.then(function(data) {console.log(data)})
.catch(function(error) {console.log(error)})
であり、同じことじゃないか?
293(1): デフォルトの名無しさん [sage] 2021/02/25(木) 15:48:16.06 ID:IXAmQAz5(1) AAS
>>260のリンクはいい記事
ゴミが大半のQiitaのJS記事の中からよく見つけたな
>>250は記事をよく読んでおこう
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.027s