2017-06-20 6 views
-1

私は2つのファイルリーダーと2つのプロミスを持っています。下に示すように、各ファイルリーダーに1つずつあります。javascript promise readfile

var fs1 = require('fs'); 
var fs2 = require('fs'); 
var r = new Promise(function(resolve, reject) { 
    fs1.readFile('reads.txt','utf8',function(e,d){ 
     if(e) reject('E R') 
     else resolve(d.trim()); 
    }) 
}); 
var w = new Promise(function(resolve, reject) { 
    fs2.readFile('write.txt','utf8',function(e,d){ 
     if(e) reject('E W') 
     else resolve(d.trim()); 
    }) 
}); 


Promise.all([r,w]) 
    .then(function(q) { 
     console.log(q); 
    }) 
    .catch(function(e) { 
     console.log(e); 
    }) 

これは正常に動作しますが、私は別の関数であることを読み取り、ファイルのセクションを持っていると、このような何か:

function filereader(theFS, theFilePath){ 
.... 
} 

はそれが可能であり、どのように? ありがとう

+0

コードを繰り返さないように、fs1とfs2から始まる関数を意味しますか? – Gerardo

+0

もちろん、試してみてください。他のコードを関数に抽象化することと変わりはありません。 – Bergi

+0

'fs1 === fs2'に注目してください。 'fs'を何度も必要とするモジュールは1つしかありません。 – Bergi

答えて

1

機能を書くだけの理由はありますか?

var fs1 = require('fs'); 
var fs2 = require('fs'); 

function filereader(fsRef, path) { 
    return new Promise(function(resolve, reject) { 
    fsRef.readFile(path,'utf8',function(e,d){ 
     if(e) reject('E R') 
     else resolve(d.trim()); 
    }) 
    }) 
} 

var w = filereader(fs2, 'write.txt') 

var r = filereader(fs1, 'read.txt') 

Promise.all([r,w]) 
    .then(function(q) { 
     console.log(q); 
    }) 
    .catch(function(e) { 
     console.log(e); 
    }) 
+0

いいえ、理由はありません。それをどうやって*するのかという疑問があるようです。 – Bergi

+1

'w'の関数も使うべきです。 – Bergi