• 面试之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 ...

    }




  • 相关阅读:
    内存管理 初始化(二)bootmem位图分配器建立 及 使用
    生成asm-offset
    内存管理(一)
    mongodb多表查询(附带pymongo实例)
    python3将docx转换成pdf,html文件,pdf转doc文件
    pymongo 目标计算机积极拒绝
    python中常用的推导(字典推导和列表推导)
    python2和python3的编码问题
    scrapy处理需要跟进的url
    flask上传文件时request.files为空的解决办法
  • 原文地址:https://www.cnblogs.com/OnceKing1996/p/13575971.html
Copyright © 2020-2023  润新知