Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.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 为什么promise.then()会异步运行?_Javascript_Es6 Promise - Fatal编程技术网

Javascript 为什么promise.then()会异步运行?

Javascript 为什么promise.then()会异步运行?,javascript,es6-promise,Javascript,Es6 Promise,在下面的代码中,whypromise.then()的行为是异步的。换句话说,为什么浏览器不等待写入promise.then()方法中的代码被执行?是什么告诉浏览器引擎,promise.then()进行异步调用 const money = 500; let promise = new Promise(function(resolve,reject){ if(money > 400){ resolve('You have a car!'); }else{

在下面的代码中,why
promise.then()
的行为是异步的。换句话说,为什么浏览器不等待写入
promise.then()
方法中的代码被执行?是什么告诉浏览器引擎,
promise.then()
进行异步调用

const money = 500;

let promise = new Promise(function(resolve,reject){
    if(money > 400){
        resolve('You have a car!');
    }else{
        reject('Yo do not have enough money to buy the Car!');
    }
});
console.log('Before');
promise.then(function(data){
    console.log('Success '+data);
});
console.log('After');
上面的代码按以下顺序打印输出,这意味着promise.then()异步工作

  • 以前
  • 之后
  • 成功你有一辆车
      承诺是异步的

      const money = 500;
      
      let promise = new Promise(function(resolve,reject){
          if(money > 400){
              resolve('You have a car!');
          }else{
              reject('Yo do not have enough money to buy the Car!');
          }
      });
      console.log('Before');
      
      let data = await promise
      console.log('Success '+data);
      console.log('After');
      
      您可以像这样使用wait来进行同步

      const money = 500;
      
      let promise = new Promise(function(resolve,reject){
          if(money > 400){
              resolve('You have a car!');
          }else{
              reject('Yo do not have enough money to buy the Car!');
          }
      });
      console.log('Before');
      
      let data = await promise
      console.log('Success '+data);
      console.log('After');
      
      结果

      Before
      Success You have a car!
      After
      

      JavaScript是单线程的,
      then()
      中的回调函数首先排队。承诺应该是异步的。您可以通过
      wait
      命令强制他们等待。这正是promise.then所做的。但是没有事件循环像它如何用于setTimeout函数。但是没有事件循环像它如何用于setTimeout函数。如果在此处执行代码-latentflip.com/loupe/,则会看到没有任何事件循环正在运行。我假设每个异步调用后面都有一个事件循环。