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

}




原文地址:https://www.cnblogs.com/OnceKing1996/p/13575971.html