Open Samgao0312 opened 2 years ago
问题:
Promise是 es6 中增加的新特性,是一种引用类型,可以通过new操作符来实例化。它有以下几个特点:
优点:
缺点:
适用场景:
问题: 为什么在已经有了Promise的情况下,还要推出Async/await呢?
Async/await 是es8中提出的概念,它是为了简化Promise的.then() 操作。
.then()
Async/await是 es8 中引入的新语法,用来简化Promise的异步操作。 在async和await出现之前,开发者只能通过链式.then()的方式处理Promise异步操作。 Async/await 是Javascript编写异步程序的新方法。以往的异步方法无外乎回调函数和Promise。但是 Async/await 建立于 Promise之上。具有以下特定:
.then
//promise: const makeRequest = () => getJSON() .then(data => { console.log(data) return "done" }) makeRequest() //async/await : const makeRequest = async () => { console.log(await getJSON()) return "done" } makeRequest()
一个经常出现的场景是,我们先调起promise1,然后根据返回值,调用promise2,之后再根据这两个Promises得值,调取promise3。
适用Promise的实现:
//promise const makeRequest = () => { return promise1().then((value1) => { // do something return promise2(value1).then((value2) => { // do something return promise3(value1, value2); }); }); }; //我们可以使用Promise.all来避免很深的嵌套 const makeRequest = () => { return promise1() .then((value1) => { // do something return Promise.all([value1, promise2(value1)]); }) .then(([value1, value2]) => { // do something return promise3(value1, value2); }); };
同样的场景,适用async/await会非常简单:
const makeRequest = async () => { const value1 = await promise1(); const value2 = await promise2(value1); return promise3(value1, value2); };
Promise 中不能自定义使用 try/catch 进行错误捕获,但是在 Async/await 中可以像处理同步代码处理错误。
const makeRequest = () => { try { getJSON().then((result) => { // this parse may fail const data = JSON.parse(result); console.log(data); }); // uncomment this block to handle asynchronous errors // .catch((err) => { // console.log(err) // }) } catch (err) { console.log(err); } };
Async/await:
const makeRequest = async () => { try { // this parse may fail const data = JSON.parse(await getJSON()) console.log(data) } catch (err) { console.log(err) } }
问题:
1、什么是Promise
Promise是 es6 中增加的新特性,是一种引用类型,可以通过new操作符来实例化。它有以下几个特点:
优点:
缺点:
适用场景:
问题: 为什么在已经有了Promise的情况下,还要推出Async/await呢?
2、什么是Async/await
Async/await是 es8 中引入的新语法,用来简化Promise的异步操作。 在async和await出现之前,开发者只能通过链式.then()的方式处理Promise异步操作。 Async/await 是Javascript编写异步程序的新方法。以往的异步方法无外乎回调函数和Promise。但是 Async/await 建立于 Promise之上。具有以下特定:
3、两者区别
.then
,又可以用 try-catch捕捉。3.1 async/await方法更简洁
3.2 多个异步请求,且后面的异步请求依赖前面异步请求结果的场景
一个经常出现的场景是,我们先调起promise1,然后根据返回值,调用promise2,之后再根据这两个Promises得值,调取promise3。
适用Promise的实现:
同样的场景,适用async/await会非常简单:
3.3 错误处理
Promise 中不能自定义使用 try/catch 进行错误捕获,但是在 Async/await 中可以像处理同步代码处理错误。
Async/await:
参考阅读