mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-01 13:42:21 -05:00
[misc] RoomManager: emitOnCompletion: properly handle Promise rejections
``` result = Promise.all([<Promise that rejects eventually>]) # rejection 1 result.then () -> RoomEvents.emit(eventName) # rejection 2 result.catch (err) -> RoomEvents.emit(eventName, err) # handle r1 ``` As shown above, the second rejection remains unhandled. The fix is to chain the `.catch()` onto the `.then()` Promise.
This commit is contained in:
parent
06a8dc8ec1
commit
5f7841526f
2 changed files with 27 additions and 3 deletions
|
@ -39,9 +39,9 @@ module.exports = RoomManager =
|
||||||
@leaveEntity client, entity, id
|
@leaveEntity client, entity, id
|
||||||
|
|
||||||
emitOnCompletion: (promiseList, eventName) ->
|
emitOnCompletion: (promiseList, eventName) ->
|
||||||
result = Promise.all(promiseList)
|
Promise.all(promiseList)
|
||||||
result.then () -> RoomEvents.emit(eventName)
|
.then(() -> RoomEvents.emit(eventName))
|
||||||
result.catch (err) -> RoomEvents.emit(eventName, err)
|
.catch((err) -> RoomEvents.emit(eventName, err))
|
||||||
|
|
||||||
eventSource: () ->
|
eventSource: () ->
|
||||||
return RoomEvents
|
return RoomEvents
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
chai = require('chai')
|
chai = require('chai')
|
||||||
|
expect = chai.expect
|
||||||
should = chai.should()
|
should = chai.should()
|
||||||
sinon = require("sinon")
|
sinon = require("sinon")
|
||||||
modulePath = "../../../app/js/RoomManager.js"
|
modulePath = "../../../app/js/RoomManager.js"
|
||||||
|
@ -20,6 +21,29 @@ describe 'RoomManager', ->
|
||||||
sinon.spy(@RoomEvents, 'emit')
|
sinon.spy(@RoomEvents, 'emit')
|
||||||
sinon.spy(@RoomEvents, 'once')
|
sinon.spy(@RoomEvents, 'once')
|
||||||
|
|
||||||
|
describe "emitOnCompletion", ->
|
||||||
|
describe "when a subscribe errors", ->
|
||||||
|
afterEach () ->
|
||||||
|
process.removeListener("unhandledRejection", @onUnhandled)
|
||||||
|
|
||||||
|
beforeEach (done) ->
|
||||||
|
@onUnhandled = (error) =>
|
||||||
|
@unhandledError = error
|
||||||
|
done(new Error("unhandledRejection: #{error.message}"))
|
||||||
|
process.on("unhandledRejection", @onUnhandled)
|
||||||
|
|
||||||
|
reject = undefined
|
||||||
|
subscribePromise = new Promise((_, r) -> reject = r)
|
||||||
|
promises = [subscribePromise]
|
||||||
|
eventName = "project-subscribed-123"
|
||||||
|
@RoomEvents.once eventName, () ->
|
||||||
|
setTimeout(done, 100)
|
||||||
|
@RoomManager.emitOnCompletion(promises, eventName)
|
||||||
|
setTimeout(() -> reject(new Error("subscribe failed")))
|
||||||
|
|
||||||
|
it "should keep going", () ->
|
||||||
|
expect(@unhandledError).to.not.exist
|
||||||
|
|
||||||
describe "joinProject", ->
|
describe "joinProject", ->
|
||||||
|
|
||||||
describe "when the project room is empty", ->
|
describe "when the project room is empty", ->
|
||||||
|
|
Loading…
Reference in a new issue