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')
。