1.async函数基本用法
async函数返回一个promise对象;可以使用then方法添加回调函数。当函数执行的时候,遇到await就先返回,等异步操作完成,再接着执行函数体后面的语句。例子如下:
async function getStockByName(name) {
const symbol = await getStockSymbol(name);
const stockPrice = await getStockPrice(symbol)
return stcokPrice;
}
getStockByName('gogle').then(function(result) {
console.log(result)
})
2.async函数特点
(1)、返回Promise对象
async函数内部return返回的值,成为then方法回调的参数
async函数内部平抛出错误会导致返回的Promise对象变为reject状态。抛出的错误对象会被catch方法回调函数接收到
(2)、搭配await命令
await命令后面返回一个Promise对象,返回该对象的结果,如果不是promise对象,就直接返回对应的值
(3)、async函数写法直观,相比于promise,generator的写法更简单易懂。
function login(urls) {
const textPromises = urls.map(url => {
return fetch(url).then(respose => respose.text());
})
textPromise.reduce((chain, textPromise) => {
return chain.then(() => textPromise)
.then(text => console.log(text))
}, Promise.resolve());
} // promise写法实现异步操作按顺序读取url,按顺序输出
//上面代码使用fetch方法,同时远程读取一组 URL。每个fetch操作都返回一个 Promise
对象,放入textPromises数组。然后,reduce方法依次处理每个 Promise
对象,然后使用then,将所有 Promise 对象连起来,因此就可以依次输出结果
async function login(urls) {
for(const url of urls) {
const response = await fetch(url);
console.log(await respose.text());
}
}// async 函数实现
async function login() {
const textPromises = urls.map(async url => {
const respose = await fetch(url)
reurn respose.text();
})
for(const textpromise of textPromises) {
console.log(await texpromise)
}
}// 多个await并发发出