Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么承诺虽然有相同的参数(node.js),但并不总是得到满足?_Javascript_Node.js_Promise - Fatal编程技术网

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

Javascript 为什么承诺虽然有相同的参数(node.js),但并不总是得到满足?,javascript,node.js,promise,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, r

我的目标如下:

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')。然后((data)=>{console.log(data);})

但是,当我试图读取
myObj.doSomething('path/to/file','fileName')中完全相同的文件时,然后((data)=>{console.log(data);})

我收到一条错误消息:无法读取未定义的属性“then”

我不明白这里的黑客是什么? 请注意,我试图编写这个对象
myObj
,以分析一些文件(HTML、CSS、JS)


提前谢谢。

myObj.doSomething是一个不返回承诺的函数,因此您不可能在调用它时使用它。

您没有返回承诺:

doSomething:(path, fileName)=>{
    return myObj.readFile(path, fileName);
}, //doSomething
顺便说一句,你应该拒绝,不要扔:

if (err) {
   reject(err)
}

我是说。。。在一种情况下,你回报了一个承诺,在另一种情况下,你什么也没有回报。。。另一个在返回的
未定义的
值中没有.then方法是意料之中的。您需要执行
返回myObj.readFile
,这是因为在第二个示例中,您尚未读取该文件。对象不存在谢谢你回答这篇帖子,实际上整个投票都被否决了,而不是你的答案:')(另一方面,我抛出了一个错误,没有拒绝它,因为,你可能知道,如果你链接了承诺,错误将被
catch()捕获)
在承诺的末尾-chain@user2804070这是预期的行为。您是对的,我必须删除
then()
调用,因此函数调用应该如下所示:
myObj.doSomething('path/to/file','fileName')