用過 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)}
)
})