zoukankan      html  css  js  c++  java
  • 面试之Promise对象

    1.promise相关的状态,promise.all()方法如何执行的?如果promise列表中有一个promise reject会怎么样?

    pending,resolved,rejected;状态只会从pending=>resolved;pending=>rejected.

    Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。

    (1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。

    (2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

    补充:

    一.promise细则

    1.Promise 对象使用:

    Promise((resolve,reject)=>{resolve(),reject()});

    2.内置方法:

    1.then(function,function)(接受resolve或reject)

    2.catch用来捕获错误或者reject

    所以一般不建议reject写在then里,而是写在catch里。

    3.Promise.all()处理一组promise对象

    such as:p = [p1,p2,p3]

    另外,如果p1有catch,p1会在catch之后变成resolved,也就是说,p的catch并不会执行。

    二.Generator 和 asyn

    1.Generator生成的是一个迭代器,可以用for(of)遍历,或者用next(),每次next()都会执行yield语句。

    catch()捕获内部的错误,无法捕捉语句外的。

    用法:

    function *gen(){

    yield  ...;

    return .....;//这个语句不算在for(of)迭代里;

    }

    eg:Generator产生斐波那契:

    function* fibonacci() {
    let [prev, curr] = [0, 1];
    for (;;) {
    yield curr;
    [prev, curr] = [curr, prev + curr];
    }
    }

    for (let n of fibonacci()) {
    if (n > 10) break;
    console.log(n);
    }

    2.asyn可以看做Generator的语法糖:

    一比较就会发现,async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已。

    用法:let gen  = asyn function(){

      await ...

    }




  • 相关阅读:
    【arc072f】AtCoder Regular Contest 072 F
    maven settings解决下载不了依赖包问题
    git 命令提交本地代码到新创建的仓库
    JAVA 利用切面、注解 动态判断请求信息中字段是否需要为空
    JAVA 根据身份证号码解析出生日期、性别、年龄
    利用JAVA正则快速获取URL的文件名
    datalist
    Mybatis map接收list参数
    bootstrap-table 列宽动态拖拽改变宽度
    JAVA 枚举类遍历与switch使用
  • 原文地址:https://www.cnblogs.com/OnceKing1996/p/13575971.html
Copyright © 2011-2022 走看看