promise是es6規範中定義的一種非同步解決方案,它可以在非同步函式處理流程中分離執行**和處理結果,還能夠新增處理成功、失敗後的鉤子函式,下面是乙個簡單案例
new
promise
(funcion
(resolve, reject)
,2000)}
).then
(msg=>
)
上述**可以看到,首先是new乙個promise例項,物件會傳入乙個執行函式作為引數,該函式稱為z
z接受兩個固定引數,resolve與reject,在z的非同步邏輯處理完成後執行resolve(),然後執行then函式內部的邏輯,同時resolve函式可以傳入引數被then函式接收
在這裡,可能會產生如下疑問
promise例項傳入的邏輯函式,為什麼加resolve, reject兩個引數
resolve是如何觸發then函式的,then函式又是如何接受資料的
簡單思考一下,此處有點類似發布-訂閱模式,resolve()相當於乙個事件通知,物件接收到通知後,執行下一步操作,這裡便應該有乙個事件佇列,對此我們做乙個模擬實現
class
kpromise
_resolve
(val)
this
._finally
(this
.value);}
);//resolve函式載入微命令之中,避免宣告的promise函式內部無異步操作時出現未完成宣告提前執行的情況
window.
postmessage(''
);}_reject
(val)
this
._finally
(this
.value);}
);window.
postmessage(''
);}_finally()
}); window.
postmessage(''
);}then
( resolvedhandler, rejectedhandler )
else
}else
}function
newrejectedhandler
(val)
else
}else
}//事件函式匯入佇列
this
.resolvedqueues.
push
(newresolvedhandler)
;this
.rejectedqueues.
push
(newrejectedhandler);}
);}finally
(finallyhandler)
static
resolve
(val));
}static
reject
(val));
}}
ES6 中的 三種非同步解決方案
generator 函式 執行會返回乙個迭代器 iterator 在迭代器上可以呼叫 next 方法,執行下乙個 yield 或 return 呼叫 next 方法,會返回乙個物件,value 的值 為 yield 之後表示式的值,done 的值 表示迭代器,是否已經執行完畢 最後乙個yield 或...
解決使用es6非同步函式的錯誤
前段時間在寫react專案時,使用了es6的async非同步函式,結果報了一大堆錯誤,控制台也提示,缺少相應的模組,今天來給大家分享一下,如何解決這個錯誤。如果不安裝相應得外掛程式,就使用es6的非同步函式的話,就出出現以下提示 解決方法 1 安裝乙個 babel polyfill 然後在.babe...
js 非同步解決方案
js的非同步請求歷來被詬病,但是社群和規範一直也在努力,這裡簡單說下這些變化。嚴格地說ajax屬於與伺服器交換資料的api,與非同步並不完全相同。但對於早期的前端來說,非同步的操作基本都是與ajax交涉的過程。可以看出這個物件具有濃濃的物件導向的風格,沒有函式式編輯的優雅。目前作為xhr的替代api...