async 函数
先看看MDN上怎样引见的:
async function 声明用于定义一个返回 AsyncFunction 对象的异步函数。异步函数是指经由过程事宜轮回异步实行的函数,它会经由过程一个隐式的 Promise 返回其效果。然则假如你的代码使用了异步函数,它的语法和构造会更像是规范的同步函数。
- 假如async函数中是return一个值,这个值就是Promise对象中resolve的值;
- 假如async函数中是throw一个值,这个值就是Promise对象中reject的值。
async函数的写法
async function imAsync(num) {
if (num > 0) {
return num // 这里相当于resolve(num)
} else {
throw num // 这里相当于reject(num)
}
}
imAsync(1).then(function (v) {
console.log(v); // 1
});
// 注重这里是catch
imAsync(0).catch(function (v) {
console.log(v); // 0
})
Promise的写法
function imPromise(num) {
return new Promise(function (resolve, reject) {
if (num > 0) {
resolve(num);
} else {
reject(num);
}
})
}
imPromise(1).then(function (v) {
console.log(v); // 1
})
imPromise(0).then(function (v) {
console.log(v); // 0
})
await
await会停息当前async函数的实行,守候背面的Promise的计算效果返回今后再继承实行当前的async函数。
假如纯真的 await setTimeout(…)是行不通的,await 不是什么都等,它守候的只是Promise,你假如没有给他返回个Promise,那它照样会继承向下实行。
所以 await 守候的不是一切的异步操纵,守候的只是Promise。
总结
async/await是在Promise以后发生的,它和Promise降生的目标都是为了处理“回调地狱”,至于什么是回调地狱:
Promise革新后:
async/await革新后: