美文网首页
2019-05-15 回调&promise&async&awai

2019-05-15 回调&promise&async&awai

作者: tsl1127 | 来源:发表于2019-05-15 16:01 被阅读0次

    回调的形式


    image.png

    1、Node.js的error-first形式
    fs.readFile('./1.txt', (error, content)=>{
    if(error){
    // 失败
    }else{
    // 成功
    }
    })


    image.png

    2、jQuery 的 success / error 形式
    $.ajax({
    url:'/xxx',
    success:()=>{},
    error: ()=>{}
    })

    3、jQuery 的 done / fail / always 形式
    $.ajax({
    url:'/xxx',
    }).done( ()=>{} ).fail( ()=>{} ).always( ()=> {})

    4、Promise 的 then 形式
    $.ajax({
    url:'/xxx',
    }).then( ()=>{}, ()=>{} ).then( ()=>{})

    promise
    Promise/A+ 规范:[https://segmentfault.com/a/1190000002452115]

    image.png

    axios.ajax({
    url: './'
    }).then(s1,e1)
    .then(s2,e2)
    .then(s3,e3)
    如果前面能够访问到则执行s1,如果不能则执行e1
    无论s1还是e1都各自能处理好,则执行s2,如果不能执行好,则执行e2
    无论s2还是e2都各自能处理好,则执行s3,如果不能执行好,则执行e3


    image.png

    自己写Promise
    写一个函数
    这个函数,要返回一个Promise(为什么?因为需要用到promise的then方法),别人用你这个函数,就可以then了


    image.png
    image.png
    image.png

    async/await


    image.png
    image.png
    image.png
    image.png

    let promise1 = await new Promise(function(resolve) {
    resolve(1);
    });
    undefined
    promise1
    1


    image.png
    image.png

    实现一个promise.all
    function PromiseAll (promises) {
    return new Promise (function(resolve,reject) {
    if (!Array.isArray(promises)) {
    return reject(new TypeError('arguments must be an array'))
    }
    let resolvesCount = 0
    let promiseNum = promises.length
    let resolveValues = new Array(promiseNum) //一个数量一样的新数组
    for(let i = 0; i<promiseNum; i++) {
    Promise.resolve(promises[i]).then(function(value){
    resolvesCount++
    resolveValues[i] = value
    if(resolvesCount === promiseNum){
    return resolve (resolveValues)
    }
    },function(reason){return reject(reason)})
    }
    })
    }

    var p1 = Promise.resolve(1),
    p2 = Promise.resolve(2),
    p3 = Promise.resolve(3);
    PromiseAll([p1,p2,p3]).then(results =>{console.log(results)})

    image.png

    参考https://segmentfault.com/a/1190000010765655

    相关文章

      网友评论

          本文标题:2019-05-15 回调&promise&async&awai

          本文链接:https://www.haomeiwen.com/subject/qrdpaqtx.html