zoukankan      html  css  js  c++  java
  • 异步编程笔记

    环境:chrome 80
    演习:用Promise async/await封装$.ajax

    Promise

    第一次请求成功,接着请求第二次

    // 先引入jq <script src="https://cdn.bootcss.com/jquery/3.5.0/jquery.min.js"></script> 
    let {log} = console;
    function request(url) {
        return new Promise((resolve,reject)=>{
            $.ajax({
                url: 'http://rap2.taobao.org:38080/app/mock/251242'+url,
                success(res) {
                    resolve(res)
                }
            })
        })
    }
    // 第一次请求
    request('/example/1587179172695').then((res)=>{
        log(res)
        return request('/getUserList') // 第二次请求
    }).then((res2)=>{
        log(res2) // 请二次请求成功
    }).catch((err)=>{
        log(err)
    })
    

    多个请求全部成功,才执行下一步操作

    // 先引入jq <script src="https://cdn.bootcss.com/jquery/3.5.0/jquery.min.js"></script> 
    let { log } = console;
    // 请求1
    let p1 = new Promise((resolve, reject) => {
        log('Started one')
        resolve('one')
    })
    // 请求2
    let p2 = new Promise((resolve,reject)=>{
        log('Started two')
        resolve('two')
    })
    let all = Promise.all([p1,p2]);
    //只要有一个请求resolve(),reject()都没有运行的话,下面的就不会运行
    all.then((data)=>{
        log(data) //['one','two'] p1,p2 全部成功后执行
    },()=>{
        log('Fail') // 只要有一个失败,就执行这里
    })
    

    多个请求,全部执行完毕后进行操作

    // 先引入jq <script src="https://cdn.bootcss.com/jquery/3.5.0/jquery.min.js"></script> 
    let { log } = console;
    // 请求1
    let p1 = new Promise((resolve, reject) => {
        log('Started one')
        reject('one')
    })
    // 请求2
    let p2 = new Promise((resolve,reject)=>{
        log('Started two')
        resolve('two')
    })
    let all = Promise.allSettled([p1,p2]);
    //只要有一个请求resolve(),reject()都没有运行的话,下面的就不会运行
    all.then((data)=>{
        // p1,p2 全部运行后执行
        log(data) //[{status: "rejected" reason: "one"},{status: "rejected" reason: "one"}] 
    })
    

    async/await

    第一次请求成功,接着请求第二次

    // 先引入jq <script src="https://cdn.bootcss.com/jquery/3.5.0/jquery.min.js"></script> 
    let {log} = console;
    function request(url) {
        return new Promise((resolve,reject)=>{
            $.ajax({
                url: 'http://rap2.taobao.org:38080/app/mock/251242'+url,
                success(res) {
                    resolve(res)
                }
            })
        })
    }
    (async ()=>{
        try {
            // 第一次请求
            let data = await request("/example/1587179172695")
            if (data) { // 第一次请求成功
                log(data)
                let list = await request('/getUserList') // 第二次请求
                log(list);
            }
        } catch(e) {
            // 请求失败
            log('fail')
        }
    })()
    

    多个请求全部成功,才执行下一步操作

    // 先引入jq <script src="https://cdn.bootcss.com/jquery/3.5.0/jquery.min.js"></script> 
    let {log} = console;
    function request(url) {
        return new Promise((resolve,reject)=>{
            $.ajax({
                url: 'http://rap2.taobao.org:38080/app/mock/251242'+url,
                success(res) {
                    resolve(res)
                }
            })
        })
    }
    (async ()=>{
        try {
            // 第一次请求
            let data = await request("/example/1587179172695")
            let list = await request('/getUserList') 
            let fulfilled = ![data,list].includes(null)
            if (fulfilled) { // 全部成功
                log(data)
                log(list);
            }
        } catch(e) {
            // 请求失败
            log('fail')
        }
    })()
    
  • 相关阅读:
    github设置添加SSH
    pythonanywhere笔记
    Python3x 爬取妹子图
    python3.4 百度API接口
    简易博客开发(8)----django1.9 博客部署到pythonanywhere上
    Python3.4+Django1.9+Bootstrap3
    docker搭建私有仓库之harbor
    docker新手常见问题和知识点
    node之sinopia搭建本地npm仓库
    rancher-HA快速搭建
  • 原文地址:https://www.cnblogs.com/niepeizhi/p/12725590.html
Copyright © 2011-2022 走看看