美文网首页
JavaScript 异步

JavaScript 异步

作者: jeneen1129 | 来源:发表于2020-06-18 11:25 被阅读0次

    异步机制详解

    才清晰知道浏览器里面的JS引擎运行来跑js,
    js中事件循环包含栈(用来执行同步任务),
    消息队列(用来加入耗时的事件回调、定时任务、ajax回调等异步任务的回调函数)
    从上文中学习:

    const p1 = new Promise(function (resolve, reject) {
       console.log(new Date)
       console.log('p1');
       setTimeout(() => resolve('after 3 s from p1'), 0)
       console.log('还会执行我吗?')
    })
    
    const p2 = new Promise(function (resolve, reject) {
       console.log(new Date)
       console.log('p2');
       setTimeout(() => resolve(p1), 0)
       console.log('还会执行我吗?')
    })
    
    p2.then(result => {
       console.log(new Date)
       console.log('success');
       console.log(result)
    }).catch(error => {
       console.log(new Date)
       console.log('failure');
       console.log(error)
    })
    
    // a
    setTimeout(function () {
       for (var i = 0; i < 100000000; i++) { }
       console.log('timer a');
    }, 0)
    
    // b
    for (var j = 0; j < 5; j++) {
       console.log(j);
    }
    
    // c
    setTimeout(function () {
       console.log('timer b');
    }, 0)
    
    // d
    function waitFiveSeconds() {
       var now = (new Date()).getTime();
       while (((new Date()).getTime() - now) < 5000) { }
       console.log('finished waiting');
    }
    
    // e
    document.addEventListener('click', function () {
       console.log('click');
    })
    
    // f
    console.log('click begin');
    
    // g
    waitFiveSeconds();
    
    
    
    /**
    * 执行步骤:
    * 栈(同步): 插入 b, f, d
    * 消息队列中: e(点击事件触发时回调函数加入队列)
    *         a, c 回调依次立即加入队列,但是要等到同步和队列中事件清空,才会执行,所以其设定的事件可能没有用,
    *              并且,如果遇到DOM操作可能还不会立即执行
    *
    * ...加入Promise
    * promise创建时立即执行,其中的 异步任务(耗时操作、鼠标点击、定时任务、网络请求等)
    * 会根据回调函数的触发而推入消息队列中,
    *(这点自己确实不清楚) .then是在回调函数中执行 
    */
    
    未触发点击事件的执行结果
    从阮一峰的异步机制讲解中
    阮一峰的 event loop讲解

    Promise-js中的同步和异步

    本来是感觉Promise不知道具体的执行语句顺序,就搜了一下,但是具体操作还是有点没有搞懂,
    好像是Promise将异步操作都变成了同步的了,
    promise学习

    相关文章

      网友评论

          本文标题:JavaScript 异步

          本文链接:https://www.haomeiwen.com/subject/fhwyxktx.html