【问题标题】:Node.js promisifaction errorNode.js 承诺错误
【发布时间】:2017-10-11 05:18:19
【问题描述】:

创建了一个文件名 big.file 并存储了值:

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

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

尝试过承诺,但我不确定是不是这样。

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);   
            } 
        });
    });
};

【问题讨论】:

    标签: javascript node.js promise


    【解决方案1】:

    在没有错误的情况下,您需要使用数据调用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);
            });
        });
    };
    

    【讨论】:

    • 另外,您应该立即使用data resolve,并在then 回调中进行任何进一步的处理
    【解决方案2】:

    您非常接近,但您定义的功能不正确。试试这个:

    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()
    

    【讨论】:

      【解决方案3】:

      您忘记“兑现”您的承诺。您需要使用要作为承诺结果返回的参数调用 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 like:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-25
        • 2018-04-05
        • 2017-05-17
        • 2018-09-23
        • 2015-04-15
        • 2014-07-04
        • 2018-05-29
        相关资源
        最近更新 更多