JaneChelle | Blog JaneChelle | Blog

执着于理想,纯粹于当下

目录
asyn函数(源自ES2017)
/      

asyn函数(源自ES2017)

1. 概念

真正意义上去解决异步回调的问题,同步流程表达异步操作

本质:Generator 的语法糖

语法:

async function foo(){

await 异步操作;

await 异步操作;

}

特点:

  1. 不需要像 Generator 去调用 next 方法,遇到 await 等待,当前的异步操作完成就往下执行
  2. 返回 的总是 Promise 对象,可以用 then 方法进行下一步操作
  3. async 取代 Generator 函数的星号*,await 取代 Generator 的 yield
  4. 语义上更为明确,使用简单,经临床验证,暂时没有任何副作用以及不良反应

2.新闻案例

 // 获取新闻内容
    async function getNews(url) {
        return new Promise((resolve, reject) => {
            $.ajax({
                method: 'GET',
                url,
                success: data => resolve(data),
                error: error => reject()
            })
        } )
    }
    async function sendXml() {
        let result = await getNews('http://localhost:3000/news?id=3');
        console.log(result);
        result = await getNews( 'http://localhost:3000' +result.commentsUrl);
        console.log(result);
    }
    sendXml();
// 获取新闻内容
    async function getNews(url) {
        return new Promise((resolve, reject) => {
            $.ajax({
                method: 'GET',
                url,
                success: data => resolve(data),
                error: error => resolve(false) // 小技巧,失败可以返回给用户提示信息
            })
        } )
    }
    async function sendXml() {
        let result = await getNews('http://localhost:3000/news?id=3');
        console.log(result);
        if(!result){
            alert('暂时没有新闻推送');
            return;
        }
        result = await getNews( 'http://localhost:3000' +result.commentsUrl);
        if(!result){
            alert('暂时没有评论内容');
            return;
        }
         console.log(result);
    }
    sendXml();

标题:asyn函数(源自ES2017)
作者:JaneChelle
地址:https://xiao.algerfan.cn/articles/2020/02/12/1581520309702.html