async函数返回一个promise对象;
async函数内部的return语句返回的值,会成为then方法回调函数的参数。
async function f() {
return 'hello'
}
f().then(v => {
console.log(v)
})
async函数返回的promise对象,必须等到内部所有的await命令后面的promise对象执行完,才会发生状态改变,除非遇到return语句,或者抛出错误。也就是说,只有async函数内部的所有异步操作执行完,才会执行then方法指定的回调函数。
async function getTitle(url) {
let response = await fetch(url);
let html = await response.text();
return html.match(/<title>([\s\S]+)<\/title>/i)[1];
}
getTitle('https://tc39.github.io/ecma262/').then(console.log)
// "ECMAScript 2017 Language Specification"
上面代码中,函数getTitle
内部有三个操作:抓取网页、取出文本、匹配页面标题。只有这三个操作全部完成,才会执行then
方法里面的console.log
。
正常情况下,await命令后面是一个promise对象,返回该对象的结果;如果不是promise对象,则直接返回相应的值;
async function f() {
return await 123;
}
f().then(v => {
console.log(v)
})