zoukankan      html  css  js  c++  java
  • Promise面试题

    const promise = new Promise((resolve, reject) => {
        console.log(1);
        resolve();
        console.log(2);
    })
    promise.then(() => {
        console.log(3);
    })
    console.log(4);

    Promise一旦创建立即执行

    所以1,2输出

    Promise.then 在所有的代码执行完毕后执行

    所以3最后

    所以是1243

    2、第二题

    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);
    })

    Promise一旦创建立即执行

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

    Promise只能resolve一次,剩下的调用都会被忽略。而一旦状态改变,就不会有再变,所以代码中的reject('error');不会有作用。
     
    所以第二次resolve('success');也不会有作用。
    答案:then:success1
     
    3、第三题
    Promise.resolve(1)
      .then(2)
      .then(Promise.resolve(3))
      .then(console.log)
    Promise.resolve方法的参数,如果是一个原始值,或者是一个不具有then方法的对象
    原始值即一些代表原始数据类型的值,也叫基本数据类型,Number,String,Boolean,Null,Undefined这些基本数据类型都是原始值。
    则Promise.resolve方法返回一个新的Promise对象,状态为resolved。Promise.resolve方法的参数,会同时传给回调函数。
    参数为1,number类型所以为原始值。所以1传给回调函数。
    then方法接受的参数是函数,而如果传递的并非是一个函数,它实际上会将其解释为then(null),这就会导致前一个Promise的结果会传递下面。
    2不是函数,所以前一个promise的结果是传给回调函数的1,往下传递。
    答案 1
    4、第四题,定时器
    定时器相当于一个异步操作,会先向后执行

     所以执行结果是

  • 相关阅读:
    Spark高可用集群搭建
    Promise
    Redux 检测状态树变更
    React forwardRef:跳转引用
    React createRef:引用
    Git 分支合并:合并某次提交
    Eclipse 创建Android 模拟器失败:no cpu/abi system image available for this target
    Eclipse Android 模拟器启动过慢
    Mac Eclipse 配置 SDK Manager Proxy (代理)
    Mac 安装、卸载JDK 1.6
  • 原文地址:https://www.cnblogs.com/carry-2017/p/11736291.html
Copyright © 2011-2022 走看看