2017-09-01 54 views
0

創建的文件名big.file的和存儲的值:Node.js的promisifaction錯誤

const fs = require('fs'); 
const file = fs.createWriteStream('./big.file'); 

for(let i=0; i<= 2; i++) { 
    file.write('1\n2\n3'); 
} 
file.end() 

試過promisifaction,但我不知道是這樣還是不行。

function readFile('./big.file','utf8'){ 
    return new Promise(function(resolve,reject){ 
     fs.readFile('./big.file', 'utf8',function(err,data){ 
      if(err) reject (err); 
      else{ 
       console.log(data); 
       const lines =data.split('\n'); 
       console.log(lines); 
       const numbers = lines.map(Number); 
       const oddNumbers = numbers.filter(n => n%2 === 1); 
       console.log('Odd numbers count:', oddNumbers.length); 
      } 
     }); 
    }); 
}; 

回答

0

當沒有錯誤時,您需要撥打resolve回撥數據。

function readFile(filename, encoding) { 
    return new Promise(function(resolve, reject) { 
     fs.readFile(filename, encoding, function(err, data) { 
      if (err) { 
       return reject (err); 
      } 
      console.log(data); 
      const lines =data.split('\n'); 
      console.log(lines); 
      const numbers = lines.map(Number); 
      const oddNumbers = numbers.filter(n => n%2 === 1); 
      console.log('Odd numbers count:', oddNumbers.length); 
      resolve(oddNumbers); 
     }); 
    }); 
}; 
+0

你也應該'resolve'用'data'立即,並在'then'回調做任何進一步的處理 – Bergi

0

你非常接近,但你正在定義你的功能不正確。試試這個:

const fs = require('fs') 
function readFile(fileName='./big.file', encoding='utf8'){ 
    return new Promise(function(resolve,reject){ 
     fs.readFile(fileName, encoding,function(err,data){ 
      if(err) reject (err); 
      else{ 
       console.log(data); 
       const lines =data.split('\n'); 
       console.log(lines); 
       const numbers = lines.map(Number); 
       const oddNumbers = numbers.filter(n => n%2 === 1); 
       console.log('Odd numbers count:', oddNumbers.length); 
      } 
     }); 
    }); 
}; 

module.exports = {readFile} 
readFile() 
0

你忘了'解決'你的承諾。您需要調用resolve(...),並將參數作爲您的承諾結果返回。

function readFile(fileName,encoding){ 
    return new Promise(function(resolve,reject){ 
     fs.readFile(fileName, encoding, function callback(err,data){ 
      if(err) reject (err); 
      else { 
       // this is your "return" statement 
       resolve(data); 
      } 
     }); 
    }); 
}; 

所以,當你使用它,你可以使用then像:

readFile('./big.file', 'utf8') 
.then(function(data){ 
    // count numbers... 
}) 
.catch(function(err){ 
    alert(err); 
});