用過 Promise 嗎?舉例說明。 如果要你創(chuàng)建一個返回 Promise 對象的函數(shù),你會怎么寫?舉例說明。

用過 Promise 嗎?舉例說明。
如果要你創(chuàng)建一個返回 Promise 對象的函數(shù),你會怎么寫?舉例說明。


用過 Promise,比如 jQuery 的 AJAX 功能,返回的就是 Promise 對象。

$.ajax({url:'/xxx', method:'get'}).then(success1, error1).then(success2, error2)
如果我自己創(chuàng)建 Promise 對象,我會這么寫

function asyncMethod(){
    return new Promise(function (resolve, reject){
        setTimeout(function(){
            成功則調(diào)用 resolve
            失敗則調(diào)用 reject
        },2000)
    })
}
//封裝一個jQuery.ajax 滿足Promise 規(guī)則
window.jQuery.ajax = function({url,method,body,headers}){
    return new Promise(function(resolve,reject){
        let request = new XMLHttpRequest()
        request.open(method,url) //配置request
        for(let key in headers){
            let value = headers[key]
            request.setRequestHeader(key,value)
        }
        request.onreadystatechange = ()=>{
            if(request.readyState === 4){
                if(request.status >= 200 && request.status < 300){
                    resolve.call(undefined,request.responseText)
                }else if(request.status >= 400){
                    reject.call(undefined,request)
                }
            }
        }
        request.send(body)
    })
}
//給按鈕綁定點(diǎn)擊事件
myButton.addEventListener('click',(e)=>{
    let promise = window.jQuery.ajax({
        url:'/xxx',
        method:'get',
        headers:{
            'content-type':'application/x-www-form-urlencoded',
            'frank':'18'
        }
    })

    promise.then(
        (text)=>{console.log(text)},
        (request)=>{console.log(request)}
    )
})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容