Promise(一)

JavaScript中的异步回调

在JavaScript中,所有代码都是单线程执行的。由于这个原因,很多情况下都需要异步操作。比如一些耗时的操作,无需等待操作完成,即可运行接下来的代码,等操作完成时执行相应的回调操作,ajax就是典型的例子

    console.log('before setTimeout');
    setTimeout(()=>{
        console.log('callback done')
    },1000);//1秒后执行回调
    console.log('after setTimeout')

Promise

根据MDN的解释,一个 Promise 就是一个代表了异步操作最终完成或者失败的对象。
语法
promise本质上是一个绑定了回调的对象,而不是将回调传进函数内部。resolve 和 reject 函数被调用时,分别将promise的状态改为fulfilled(完成)或rejected(失败)。executor 内部通常会执行一些异步操作,一旦完成,可以调用resolve函数来将promise状态改成fulfilled,或者在发生错误时将它的状态改为rejected。

    let p = new Promise((resolve,reject)=>{
        setTimeout(()=>{
            let num = Math.random()*10;
            if(num>5){
                resolve('success')
            }else{
                reject('fail')
            }
        },)
    })
    p.then(res=>{
        console.log(res)
    }).catch(err=>{
        console.log(err)
    })

将普通异步函数封装成Promise
1.原生ajax封装成promise

let jsGetAjaxPromise = (params)=>{
        return new Promise((resolve,reject)=>{
            let xhr = new XMLHttpRequest();
            xhr.open('get',params.url,true);
            xhr.onload = resolve;
            xhr.onerror = reject;
            xhr.send();
        })
    }

    let p1 = jsGetAjaxPromise({
        url:`${baseUrl}/api/Shops`
    })
    
    p1.then(res=>{
        console.log(res)
    }).catch(error=>{
        console.log(error)
    })

2.小程序wx.request封装成promise

/* wx.js */
export const wxPromise = (params)=>{
    return new Promise((resolve,reject)=>{
        wx.request({
            url:params.url,
            data:params.data,
            header:params.header,
            method:params.method,
            dataType:params.dataType,
            responseType:params.responseType,
            success:resolve,
            fail:reject
        })
    })
}

            /* 使用 */
            import {wxPromise} from 'wx.js'
            wxPromise({
                url:`${baseUrl}/api/Shops`
            }).then(res=>{
                console.log(res)
            }).catch(error=>{
                console.log(error)
            })
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函...
    neromous阅读 8,735评论 1 56
  • 什么是Promise fetchX() 和fetchY() 是直接调用的,它们的返回值(promise!)被传给a...
    xpwei阅读 2,573评论 0 6
  • 一、Promise的含义 Promise在JavaScript语言中早有实现,ES6将其写进了语言标准,统一了用法...
    Alex灌汤猫阅读 844评论 0 2
  • 去年6月份, ES2015正式发布(也就是ES6,ES6是它的乳名),其中Promise被列为正式规范。作为ES6...
    猪猪侠闯天下阅读 957评论 0 0
  • 笑来老师说过,普通人想要实现财富自由,可能只有投资这一条路。今天补课《机会》,终于看到了传说中的GAFATA,也终...
    妄_念阅读 163评论 0 1