异步编程终极解决方案async-await
一、async/await
· async function 是Promise 的语法糖封装
· 异步编程的终极方案– 以同步的方式写异步
· await 关键字可以“暂停”async function的执行
· await 关键字可以以同步的写法获取Promise 的执行结果
· try-catch 可以获取await 所得到的错误
(async function () {
await findJob()
console.log('trip')
})()
async function findJob() {
try {
// 进行三轮面试
await interview(1);
await interview(2);
await interview(3);
try {
// 征求多个家庭成员的意见
await Promise.all([
family('father').catch(() => { /* 老爸说的话当耳边风 */ }),
family('mother'),
family('wife'),
])
} catch (e) {
e.round = 'family'
throw e
}
console.log('smile')
} catch (e) {
console.log('cry at ' + e.round)
}
}
/**
* 进行第round轮面试
*/
function interview(round) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (Math.random() < 0.2) {
const error = new Error('failed');
error.round = round;
reject(error);
} else {
resolve('success');
}
}, 500)
})
}
/**
* 寻求家人的意见确定要不要接受offer
*/
function family(name) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (Math.random() < 0.2) {
const error = new Error('disagree');
error.name = name;
reject(error);
} else {
resolve('agree');
}
}, Math.random() * 400)
})
}
· 它是一个穿越事件循环存在的 function
赞 (0)