一.Promisejavascript
1.返回一个promise对象,函数前面的async
一词意味着一个简单的事情:这个函数老是返回一个promise,若是代码中有return <非promise>
语句,JavaScript会自动把返回的这个value值包装成promise的resolved值。java
2.<1>关键词await
可让JavaScript进行等待(相似于then),直到一个promise执行并返回它的结果,JavaScript才会继续往下执行。git
<2>await只能在async中使用github
<3>await后面要是promise对象json
eg1:如下是一个promise在1s以后resolve的例子:api
async function f() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve('done!'), 1000)
})
let result = await promise // 直到promise返回一个resolve值(*)
alert(result) // 'done!'
}
f()promise
eg2:app
async function showAvatar() {
// read our JSON
let response = await fetch('/article/promise-chaining/user.json')
let user = await response.json()
// read github user
let githubResponse = await fetch(`https://api.github.com/users/${user.name}`)
let githubUser = await githubResponse.json()
// 展现头像
let img = document.createElement('img')
img.src = githubUser.avatar_url
img.className = 'promise-avatar-example'
documenmt.body.append(img)
// 等待3s
await new Promise((resolve, reject) => {
setTimeout(resolve, 3000)
})
img.remove()
return githubUser
}
showAvatar()异步
3.错误处理async
await 命令后面的 Promise 对象,运行结果多是 rejected,因此最好把 await 命令放在 try...catch 代码块中。
async function myFunction() { try { await somethingThatReturnsAPromise(); } catch (err) { console.log(err); } } // 另外一种写法 async function myFunction() { await somethingThatReturnsAPromise().catch(function (err){ console.log(err); }); }
4.async await同步执行多个异步代码
async function f() { let promise1 = new Promise((resolve, reject) => { setTimeout(() => resolve('1000'), 1000) }) let promise2 = new Promise((resolve, reject) => { setTimeout(() => resolve('2000'), 2000) }) let promise3 = new Promise((resolve, reject) => { setTimeout(() => resolve('3000'), 3000) }) let promise4 = new Promise((resolve, reject) => { setTimeout(() => resolve('4000'), 4000) }) let result1 = await promise4 console.log(result1) let result2 = await promise3 console.log(result2) let result3 = await promise2 console.log(result3) let result4 = await promise1 console.log(result4) } f()