虽然它具有相同的参数(node.js),为什么并不总是满足承诺?

时间:2017-10-19 15:47:17

标签: javascript node.js promise

我有一个如下对象:

let myObj ={
    doSomething:(path, fileName)=>{
        myObj.readFile(path, fileName).then((data)=>{
        console.log(data);
        })
    }, //doSomething
    readFile:(path, fileName)=>{
        return new Promise((resolve, reject) => {
            fs.readFile(path.join(p, f), { encoding: "utf8", flag: "r" }, (err, data) => {
                if (err) {
                    throw new Error(err.message);
                }
                console.log(data);
                resolve(data);
            })//fs.readFile-callback
        });// return
    }//readFile
} //myOb

问题

我可以使用以下代码行直接读取文件:myObj.readFile('path/to/file','fileName').then((data)=>{console.log(data);})

但是,当我尝试在myObj.doSomething('path/to/file','fileName').then((data)=>{console.log(data);})

中读取完全相同的文件时

我收到错误消息:无法读取属性'然后'未定义的

我无法理解这里的黑客是什么? 请注意,我正在尝试编写此对象myObj,以分析一些文件(HTML,CSS,JS)。

先谢谢你。

2 个答案:

答案 0 :(得分:2)

你没有回复承诺:

doSomething:(path, fileName)=>{
    return myObj.readFile(path, fileName);
}, //doSomething

顺便说一下,你应该拒绝而不是抛出:

if (err) {
   reject(err)
}

答案 1 :(得分:0)

myObj.doSomething是一个不返回承诺的函数,所以你不可能再调用它。