今天开始和大家一起系统的学习ES6+,每天3分钟,用一把斗地主的时间,重学ES6+,前面我们介绍了迭代器和生成器,今天继续介绍async 和 await
异步函数的返回值一定是一个Promise
async function foo() {
console.log("中间代码~")
// 1.返回一个值
// promise then function exec: 1
return 1
// 2.返回thenable
// promise then function exec: hahahah
return {
then: function(resolve, reject) {
resolve("hahahah")
}
}
// 3.返回Promise
// promise then function exec: hehehehe
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("hehehehe")
}, 2000)
})
}
// 异步函数的返回值一定是一个Promise
const promise = foo()
promise.then(res => {
console.log("promise then function exec:", res)
})
异步函数中的异常会被作为promise的reject的值
async function foo() {
console.log("foo function start~")
console.log("中间代码~")
// 异步函数中的异常, 会被作为异步函数返回的Promise的reject值的
throw new Error("error message")
console.log("foo function end~")
}
// 异步函数的返回值一定是一个Promise
foo().catch(err => {
console.log("err:", err)
})
// 1.await 跟上表达式
function requestData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(222)
// reject(1111)
}, 2000);
})
}
async function foo() {
const res1 = await requestData()
console.log("后面的代码1", res1)
console.log("后面的代码2")
const res2 = await requestData()
console.log("res2后面的代码", res2)
}
// 依次打印
// 后面的代码1 222
// 后面的代码2
// res2后面的代码 222
// 2.跟上其他的值
async function foo() {
const res1 = await 123
// 返回值 res1: 123
const res1 = await {
then: function(resolve, reject) {
resolve("abc")
}
}
// 返回值 res1: abc
const res1 = await new Promise((resolve) => {
resolve("why")
})
// 返回值 res1: why
console.log("res1:", res1)
}
// 3.reject值
async function foo() {
const res1 = await requestData()
console.log("res1:", res1)
}
foo().catch(err => {
console.log("err:", err)
})
阅读量:2018
点赞量:0
收藏量:0