• promise执行顺序面试题令我头秃,你能作对几道


    说明

    最近在复习 Promise 的知识,所以就做了一些题,这里挑出几道题,大家一起看看吧。

    题目一

    const promise = new Promise((resolve, reject) => {
       
        console.log(1);
        resolve();
        console.log(2);
    })
    
    promise.then(() => {
       
        console.log(3);
    })
    
    console.log(4);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    解析

    首先 Promise 新建后立即执行,所以会先输出 1,2,而 Promise.then() 内部的代码在 当次 事件循环的 结尾 立刻执行 ,所以会继续输出4,最后输出3。

    答案

    1
    2
    4
    3
    
    • 1
    • 2
    • 3
    • 4

    题目二

    const promise = new Promise((resolve, reject) => {
       
        resolve('success1');
        reject('error');
        resolve('success2');
    });
    
    promise.then((res) => {
       
        console.log('then:', res);
    }).catch((err) => {
       
        console.log('catch:', err);
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    解析

    resolve 函数将 Promise 对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;

    reject 函数将 Promise 对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

    而一旦状态改变,就不会再变。
    所以 代码中的reject('error'); 不会有作用。

    Promise 只能 resolve 一次,剩下的调用都会被忽略。
    所以 第二次的 resolve('success2'); 也不会有作用。

    答案

    then: success1
    
    • 1

    题目三

    Promise.resolve(1)
      .then(2)
      .then(Promise.resolve(3))
      .then(console.log)
    
    • 1
    • 2
    • 3
    • 4

    解析

    Promise.resolve 方法的参数如果是一个原始值,或者是一个不具有 then 方法的对象,则 Promise.resolve 方法返回一个新的 Promise 对象,状态为resolvedPromise.resolve 方法的参数,会同时传给回调函数。

    then 方法接受的参数是函数,而如果传递的并非是一个函数,它实际上会将其解释为 then(null),这就会导致前一个 Promise 的结果会穿透下面。

    答案

    1
    
    • 1

    题目四

    红灯三秒亮一次,绿灯一秒亮一次,黄灯2秒亮一次;如何让三个灯不断交替重复亮灯?(用Promse实现)三个亮灯函数已经存在:参考 前端进阶面试题详细解答

    function red() {
       
        console.log('red');
    }
    function green() {
       
        console.log('green');
    }
    function yellow() {
       
        console.log('yellow');
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    解析

    红灯三秒亮一次,绿灯一秒亮一次,黄灯2秒亮一次,意思就是3秒,执行一次 red 函数,2秒执行一次 green 函数,1秒执行一次 yellow 函数,不断交替重复亮灯,意思就是按照这个顺序一直执行这3个函数,这步可以就利用递归来实现。

    答案

    function red() {
       
        console.log('red');
    
    • 1
    • 2
    • 3
  • 相关阅读:
    【k8s】一、基础实验环境准备
    前端包管理器的工具,npm和Yarn以及pnpm是最常用的
    张益唐的朗道-西格尔零点猜想的论文公布,专家认为该论文尚未完整解决零点猜想
    React--组件的生命周期
    华为HCIE云计算之Rainbow8.0.0版本迁移windows实战
    CSS基础入门03
    Scientific colour maps颜色包--共35种--全平台可用
    【Bash】常用命令总结
    卡片翻转效果的实现思路
    安卓备份基带分区 备份字库 步骤解析 以免误檫除分区或者“格机” 后悔莫及
  • 原文地址:https://blog.csdn.net/loveX001/article/details/127915063