zoukankan      html  css  js  c++  java
  • 异步代码async await阻塞进程的误区——await的是Promise的resolve而不是语句块的执行结束

    阻塞失效?

    考虑下面的语句块

    var f = async function(){
    	await setTimeout(()=>{console.log(1)}, 3000);
    	console.log(2);
    }
    f();
    

    结果先打印出了2,随后打印出了1,看似并没有阻塞等待;然而,殊不知只要setTimeout该函数注册完成就算该异步代码完成,可以继续进行下面的代码。
    下面看一个菜鸟教程教程中的例子

    function testAwait (x) {
      return new Promise(resolve => {
        setTimeout(() => {
          resolve(x);
        }, 2000);
      });
    }
     
    async function helloAsync() {
      var x = await testAwait ("hello world");
      console.log(x); 
    }
    helloAsync ();
    

    这里等待的(await)就是真正的异步代码,仅当Promise对象resolve后才算异步代码完成,才可以继续下面的代码。

  • 相关阅读:
    PyQT_Group
    单例模式演示-1-39-07
    RSqlBuilder
    RExcel
    RJson
    NodeJs开发目录
    NodeJs事件驱动
    NodeJs实用工具util
    NodeJs之global,process
    NodeJs两个简单调试技巧
  • 原文地址:https://www.cnblogs.com/lyzz1314/p/13650346.html
Copyright © 2011-2022 走看看