2017-09-01 64 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); 
});