保证异步js

时间:2018-01-17 10:16:11

标签: javascript node.js asynchronous

我的脑袋即将爆炸。我无法弄清楚代码是否异常:

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。 或者承诺中的内容无关紧要,如果它的承诺 - 它会自动异步吗?

3 个答案:

答案 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;
&#13;
&#13;