前端高階 手寫PromiseA

2021-10-25 02:14:14 字數 2558 閱讀 1221

// promisea+

(function()

}})}

// 成功時執行的方法

varresolve

=function

resolve

(value)

// 失敗時執行的方法

varreject

=function

reject

(value)

// 立即執行執行器函式:如果函式報錯,則promise狀態變為失敗

trycatch

(err)}

// promise原型

promise.prototype =

)break

;case

"rejected"

:settimeout

(function()

)break

;default

: self.fulfilledcallback.

push

(onfulfilled)

self.rejectedcallback.

push

(onrejected)

break;}

},catch

:function

(params)

}// 將類暴露至全域性,覆蓋內建promise

window.promise = promise;})

()

完善then的鏈式呼叫

promise的方法擴充套件

// promisea+

(function()

}})}

// 成功時執行的方法

varresolve

=function

resolve

(value)

// 失敗時執行的方法

varreject

=function

reject

(value)

// 立即執行執行器函式:如果函式報錯,則promise狀態變為失敗

trycatch

(err)}

function

resolvepromise

(promise, x, resolve, reject)

// 判斷是否為方法或物件

// + 如果是則繼續判斷

// + 如果不是則以成功狀態返回x

if(x !=

null

&&typeof x ===

"function"

||typeof x ===

"object"),

function

(reason))}

else

}catch

(err)}

else

}// promise原型

promise.prototype =

}// 如果第二個引數不是方法,則給與預設方法 丟擲實參if(

typeof onrejected !==

"function")}

// self:原始例項

// promise:新返回的例項(resolve/ reject控制它的成功/失敗)

var self =

this

;var promise =

newpromise

(function

(resolve, reject)

catch

(err)}

)break

;case

"rejected"

:settimeout

(function()

catch

(err)}

)break

;default

: self.fulfilledcallback.

push

(function

(promiseresult)

catch

(err)}

) self.rejectedcallback.

push

(function

(promiseresult)

catch

(err)}

)break;}

})return promise

},// 相當於第乙個引數不傳

catch

:function

(onrejected)

}// 擴充套件方法

promise.

resolve

=function

resolve

(value))}

promise.

reject

=function

reject

(reason))}

// 將類暴露至全域性,覆蓋內建promise

window.promise = promise;})

()

手寫前端 serialize

在jquery中,寫下我們很方便序列化我們的表單,比如說 window.onload function 但是jquery庫是沉重的,那麼如何手寫乙個呢?思想 首先無論如何你都要去遍歷form裡面的,每乙個元素如input text radio select checkbox,獲取到name,然後va...

前端手寫系列 手寫reduce函式

reduce函式常用於對陣列,reduce函式接受3個引數 被迭代的陣列 用於迭代計算的函式 迭代的初始值 注意點 如果沒有提供初始值時,會預設使用陣列的第乙個元素來作為初始值 function reduce arr,callback,initialval 如果沒有將initialval傳遞給該函式...

前端面試(手寫)

手寫篇 手寫 instenceof 原生的 instanceof console.log instanceof array true console.log instanceof array false 手寫 myinstanceof function myinstanceof left,right...