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);
      });
    
  • 相关阅读:
    【AtCoder】ARC067 F
    【AtCoder】ARC095 E
    【BZOJ】4559: [JLoi2016]成绩比较 计数DP+排列组合+拉格朗日插值
    【CodeForces】961 F. k-substrings 字符串哈希+二分
    【CodeForces】961 G. Partitions 斯特林数
    【BZOJ】2310: ParkII 插头DP
    【BZOJ】2331: [SCOI2011]地板 插头DP
    webpack从0开始---(二)
    webpack从0开始---(一)
    前端基础知识(不应需要思考的知识点)三
  • 原文地址:https://www.cnblogs.com/ainsliaea/p/13229341.html
Copyright © 2011-2022 走看看