1、你如何理解Promise?
Promise是异步编程的一种解决方案,它是一个对象,可以获取异步操作的消息,他的出现大大改善了异步编程的困境,避免了地狱回调,它比传统的解决方案回调函数和事件更合理和更强大。
2、Promise的状态
- pending: 初始状态,不是成功或失败状态。
- fulfilled: 意味着操作成功完成。
- rejected: 意味着操作失败。
3、谈谈Promise.all方法,Promise.race方法以及使用
-
无论是all 还是 rece 当中有一个promise失败那么全部都会失败
-
Promise.all 可以将多个Promise实例包装成一个新的Promise实例。同时,成功和失败的返回值是不同的,成功的时候返回的是一个结果数组,而失败的时候则返回最先被reject失败状态的值。
-
顾名思义,Promse.race就是赛跑的意思,意思就是说,Promise.race([p1, p2, p3])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。
4、Promise 优缺点
promise的then如果传入的两个函数那么第一个是 成功回调 ,第二个是失败回调
-
有了 Promise 对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise 对象提供统一的接口,使得控制异步操作更加容易。
-
Promise 也有一些缺点。首先,无法取消 Promise,一旦新建它就会立即执行,无法中途取消。其次,如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。第三,当处于 Pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
5、await 到底在等什么?
await 表达式的运算结果取决于它等的是什么。
-
如果它等到的不是一个 Promise 对象,那 await 表达式的运算结果就是它等到的东西。
-
如果它等到的是一个 Promise 对象,await 就忙起来了,它会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果。
-
function getSomething() {return "something"; } async function testAsync() {return Promise.resolve("hello async"); } async function test() {const v1 = await getSomething();const v2 = await testAsync();console.log(v1, v2); } test();