實例與程式碼片段
Delay(延時)
function delay(ms) {
ms = Number(ms)
ms = Number.isNaN(ms) ? +0 : Math.max(ms, +0)
return new Promise(resolve => setTimeout(resolve, ms))
}如果要讓delay可以有回傳值,可以用以下的範例:
function delay(ms) {
return function(result) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve(result)
}, ms)
})
}
}
//使用範例
delay(1000)('hello').then(function(result) {
console.log(result)
})包裝 XMLHttpRequest(AJAX)
包裝 jQuery 的$.ajax
forEach/for/while
在 forEach/for/while 等情況時,應該要使用Promise.all,因為它最後可以直接回傳一個陣列值,這提供了一些使用上的便利。
以下的的原本的使用範例,是希望能刪除所有的文件再到下一步:
正確用法
使用Promise.all,並以map取代forEach。
呼叫函式將回傳結果轉成 Promise 物件
說明如下:
當呼叫函式回傳一個值
v時,會回傳一個以v實現的 promise 物件。當呼叫函式會 throw 出例外
e時,會回傳一個以e拒絕一個 promise 物件。
改寫回調函式
基本上這是為了改用回調地獄用的方式,把原本的回調函式程式碼:
另一個改寫的對照簡單範例:
出自Staying Sane With Asynchronous Programming: Promises and Generators
Last updated
Was this helpful?