我的脑袋即将爆炸。我无法弄清楚代码是否异常:
const fs = require('fs');
function Fn(file){
return new Promise((resolve, reject) => {
if(fs.existsSync(file)){
resolve('Yes');
}else{
reject('No');
}
});
}
Fn('file.txt')
.then(result => {
console.log(result);
})
.catch(err => {
console.log(err);
})
所有内容都包含Promise
,因此它应该是异步的。但内心承诺我有同步方法fs.existsSync
。
或者承诺中的内容无关紧要,如果它的承诺 - 它会自动异步吗?
答案 0 :(得分:1)
existsSync
是同步的,但执行需要一些时间。让我们说,一秒钟。所以你的承诺将在一秒后解决,因为它是一个承诺,它是非阻塞的。 IMO,这是一种使同步代码无阻塞的方法。
答案 1 :(得分:0)
根据我的知识给出的代码是异步的。是的,承诺中的内容并不重要。函数fn(File)
将永远返回承诺
答案 2 :(得分:0)
好吧,你放在Promise
中的内容是同步的,这意味着在{/ em> resolve
完成后existsSync
将被称为。但是Fn
调用 是异步的,这意味着在解析之后将执行此调用之后放置的任何代码。
function existsSync() {
for (var i = 0; i < 999999999; i++); // Long synchronous operation
return true;
}
function Fn(file) {
return new Promise((resolve, reject) => {
if (existsSync(file)) {
resolve('Yes');
} else {
reject('No');
}
});
}
Fn('file.txt')
.then(result => {
console.log(result);
})
.catch(err => {
console.log(err);
});
console.log('This will show before "Yes".');
&#13;