zoukankan      html  css  js  c++  java
  • Promise(三)

    1. 事件循环和 Promise

    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/EventLoop

    https://zhuanlan.zhihu.com/p/33058983

    const s = new Date().getSeconds();
    console.log(s);
    setTimeout(function () {
      // 输出 "2",表示回调函数并没有在 500 毫秒之后立即执行
      console.log("s is : " + s);
      console.log("Ran after " + (new Date().getSeconds() - s) + " seconds");
    }, 500);
    
    console.log("after setTimeout...");
    
    while (true) {
      //   console.log("loop...");
      if (new Date().getSeconds() - s >= 2) {
        console.log("Good, looped for 2 seconds");
        break;
      }
    }
    
    // 23
    // after setTimeout...
    // Good, looped for 2 seconds
    // s is : 23
    // Ran after 2 seconds
    

    在上面的例子中,while 循环一直在占用消息队列,直到 2 秒之后循环结束,此时 setTimeout 的 500ms 早已到期,所以立即执行,输出 2。

    const promise = new Promise(function (resolve, reject) {
       setTimeout(function () {
        console.log("hello");
      }, 0);
    	resolve("ok");
      console.log("end");
    });
    
    promise.then(function (value) {
      console.log(value);
    });
    
    // end
    // ok
    // hello
    

    在这个例子中,即使 setTimeout 的 delay 设置为 0,resolve 还是先于 setTimeout 执行。

    2. return Promise.reject(error);

    axios 的 request 和 response 的拦截器经常这么写,其实就是对一个错误进行抛出,和 throw 效果一样,需要在接下来的 catch 中进行捕获。

    let foo = new Promise((resolve, reject) => {
      reject('hwhw');
    });
    foo
      .then(
        (res) => {
          console.log('then...');
          console.log(res, x);
        },
        (error) => {
          console.log('then--error...');
          console.log(error);
          // return Promise.reject(error + 'again'); // 和下面的 new Error 作用一样,都是被 catch 捕获
          throw new Error(error + 'again2');
        }
      )
      .catch((error) => {
        console.log('catch...');
        console.log(error.message);
      });
    
  • 相关阅读:
    Eclipse 远程调试
    大数据处理方法bloom filter
    sicily 1259 Sum of Consecutive Primes
    sicily 1240. Faulty Odometer
    sicily 1152 简单马周游 深度优先搜索及回溯算法
    sicily 1050 深度优先搜索解题
    sicily 1024 邻接矩阵与深度优先搜索解题
    sicily 1156 二叉树的遍历 前序遍历,递归,集合操作
    sicily 1443 队列基本操作
    sicily 1006 team rankings 枚举解题
  • 原文地址:https://www.cnblogs.com/ainsliaea/p/13229341.html
Copyright © 2011-2022 走看看