Add Promise finally method to polyfill
This commit is contained in:
parent
1410e35456
commit
f99b804f5b
2 changed files with 43 additions and 2 deletions
|
|
@ -61,6 +61,20 @@ PromisePolyfill.prototype.then = function(onFulfilled, onRejection) {
|
|||
PromisePolyfill.prototype.catch = function(onRejection) {
|
||||
return this.then(null, onRejection)
|
||||
}
|
||||
PromisePolyfill.prototype.finally = function(callback) {
|
||||
return this.then(
|
||||
function(value) {
|
||||
return PromisePolyfill.resolve(callback()).then(function() {
|
||||
return value
|
||||
})
|
||||
},
|
||||
function(reason) {
|
||||
return PromisePolyfill.resolve(callback()).then(function() {
|
||||
return PromisePolyfill.reject(reason);
|
||||
})
|
||||
}
|
||||
)
|
||||
}
|
||||
PromisePolyfill.resolve = function(value) {
|
||||
if (value instanceof PromisePolyfill) return value
|
||||
return new PromisePolyfill(function(resolve) {resolve(value)})
|
||||
|
|
@ -96,10 +110,18 @@ PromisePolyfill.race = function(list) {
|
|||
}
|
||||
|
||||
if (typeof window !== "undefined") {
|
||||
if (typeof window.Promise === "undefined") window.Promise = PromisePolyfill
|
||||
if (typeof window.Promise === "undefined") {
|
||||
window.Promise = PromisePolyfill
|
||||
} else if (!window.Promise.prototype.finally) {
|
||||
window.Promise.prototype.finally = PromisePolyfill.prototype.finally
|
||||
}
|
||||
module.exports = window.Promise
|
||||
} else if (typeof global !== "undefined") {
|
||||
if (typeof global.Promise === "undefined") global.Promise = PromisePolyfill
|
||||
if (typeof global.Promise === "undefined") {
|
||||
global.Promise = PromisePolyfill
|
||||
} else if (!global.Promise.prototype.finally) {
|
||||
global.Promise.prototype.finally = PromisePolyfill.prototype.finally
|
||||
}
|
||||
module.exports = global.Promise
|
||||
} else {
|
||||
module.exports = PromisePolyfill
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ o.spec("promise", function() {
|
|||
o("constructor has correct methods", function() {
|
||||
o(typeof Promise.prototype.then).equals("function")
|
||||
o(typeof Promise.prototype.catch).equals("function")
|
||||
o(typeof Promise.prototype.finally).equals("function")
|
||||
o(typeof Promise.resolve).equals("function")
|
||||
o(typeof Promise.reject).equals("function")
|
||||
o(typeof Promise.race).equals("function")
|
||||
|
|
@ -53,6 +54,24 @@ o.spec("promise", function() {
|
|||
o(value).equals(1)
|
||||
}).then(done)
|
||||
})
|
||||
o("finally after then returns promise", function(done) {
|
||||
var promise = Promise.resolve(1)
|
||||
|
||||
promise.then(function(value) {
|
||||
o(value).equals(1)
|
||||
}).finally(function(value) {
|
||||
o(value).equals(undefined)
|
||||
}).then(done)
|
||||
})
|
||||
o("finally after catch returns promise", function(done) {
|
||||
var promise = Promise.reject(1)
|
||||
|
||||
promise.catch(function(value) {
|
||||
o(value).equals(1)
|
||||
}).finally(function(value) {
|
||||
o(value).equals(undefined)
|
||||
}).then(done)
|
||||
})
|
||||
})
|
||||
o.spec("resolve", function() {
|
||||
o("resolves once", function(done) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue