Merge pull request #5666 from electron/remote-promise-reject

Handle rejection of remote promises
This commit is contained in:
Cheng Zhao 2016-05-24 04:30:25 +00:00
commit cd444e82f9
4 changed files with 27 additions and 2 deletions

View file

@ -91,7 +91,9 @@ let valueToMeta = function (sender, value, optimizeSimpleObject = false) {
} else if (meta.type === 'buffer') {
meta.value = Array.prototype.slice.call(value, 0)
} else if (meta.type === 'promise') {
meta.then = valueToMeta(sender, function (v) { value.then(v) })
meta.then = valueToMeta(sender, function (onFulfilled, onRejected) {
value.then(onFulfilled, onRejected)
})
} else if (meta.type === 'error') {
meta.members = plainObjectToMeta(value)

View file

@ -47,7 +47,9 @@ var wrapArgs = function (args, visited) {
if (value.constructor != null && value.constructor.name === 'Promise') {
return {
type: 'promise',
then: valueToMeta(function (v) { value.then(v) })
then: valueToMeta(function (onFulfilled, onRejected) {
value.then(onFulfilled, onRejected)
})
}
} else if (v8Util.getHiddenValue(value, 'atomId')) {
return {

View file

@ -106,6 +106,22 @@ describe('ipc module', function () {
done()
})
})
it('handles rejections via catch(onRejected)', function (done) {
var promise = remote.require(path.join(fixtures, 'module', 'rejected-promise.js'))
promise.reject(Promise.resolve(1234)).catch(function (error) {
assert.equal(error.message, 'rejected')
done()
})
})
it('handles rejections via then(onFulfilled, onRejected)', function (done) {
var promise = remote.require(path.join(fixtures, 'module', 'rejected-promise.js'))
promise.reject(Promise.resolve(1234)).then(function () {}, function (error) {
assert.equal(error.message, 'rejected')
done()
})
})
})
describe('remote webContents', function () {

View file

@ -0,0 +1,5 @@
exports.reject = function (promise) {
return promise.then(function () {
throw Error('rejected')
})
}