• 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、第四题,定时器
    定时器相当于一个异步操作,会先向后执行

     所以执行结果是

  • 相关阅读:
    block本质探寻五之atuto类型局部实例对象
    block本质探寻四之copy
    block本质探寻三之block类型
    Android Studio使用时遇见的一些问题+解决方法(持续更新)
    Android之练习MVVM+DataBinding框架模式
    解决 Mac Android Studio Gradle Sync 慢的问题
    Android之MVC、MVP、MVVM
    Android之同步与异步
    Android之Fragment
    Android之Fragment栈操作 commit()问题分析
  • 原文地址:https://www.cnblogs.com/carry-2017/p/11736291.html
Copyright © 2020-2023  润新知