【发布时间】:2019-12-16 19:09:41
【问题描述】:
我写了下面的代码:
function readFile(path) {
return new Promise(function(resolve, reject){
if(!fs.existsSync(path))
return reject(new Error("data.json file does not exist"));
else {
console.log("File is actually found!");
return Promise.resolve("File found");
}
})
}
readFile(path)
.then(value => {
console.log(value);
})
.catch(err => {
console.log(err);
})
会发生什么:
如果文件存在,控制台输出只是File is actually found! 如果文件不存在,则显示:data.json file does not exist 以及错误堆栈。
我想要什么:
当文件确实存在时,除了File is actually found! 之外,我还希望显示File found。我发现当我将return Promise.resolve("File found"); 替换为resolve("File found"); 甚至return resolve("File found"); 时会发生这种情况。
问题:resolve() 和 Promise.resolve() 之间到底有什么区别?为什么返回或不返回 not 会有所不同(我猜是因为它是函数中的最后一条语句)。
注意:我使用existsSync() 是因为我希望进程在实际读取文件之前一直处于阻塞状态,因为如果未读取文件,则无事可做!我知道这里可能不需要 promise,但我仍然使用它,因为这是我正在努力学习的。
谢谢!
编辑:还有一个问题 - 实际上应该拒绝和解决什么?我的意思是,在上面的代码中,我将new Error(...) 传递给reject() 并将一个字符串传递给resolve() - 可以吗?
【问题讨论】:
-
Promise.resolve 返回一个解析为给定值的承诺。 resolve 解决了你调用它的承诺......你永远不需要像你一样使用 Promise.resolve,因为它不会解决你调用它的承诺 - 注意:Promise.resolve 是 Promise 的一种方法,resolve只是一个约定......你可以做新的
Promise((good, bad) => good(1));......承诺得到解决 -
@AnkurR - 不是真的,至少在那个问题中没有永远悬而未决的承诺:p
-
@AnkurR,这根本与 promise 构造函数无关。
-
您正在寻找它们之间的区别,并且该问题的答案也阐明了相同的问题。您的使用方式不同。
标签: javascript node.js promise