2017-06-20 40 views
-1

我有兩個文件讀取器和兩個Promise,每個文件讀取器都有一個,如下所示。javascript promise讀取文件

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'多次不會改變。 – 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