I see, there's a tryFailure - you might should use that. the race I mean is that isCompleted may change between you checking it and you completing the promise. If you know the other potentially-completing thread isn't running it would be OK but using tryFailure would make this code clearly correct either way. You would also need to use trySuccess or tryWhatever over in the other thread presumably if it doesn't handle the exception...