Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Commit 710c020

Browse files
committed
Merge pull request #1496 from atom/aw/get-real-item-promise
Restore getRealItemPromise()
1 parent a173bef commit 710c020

File tree

3 files changed

+26
-0
lines changed

3 files changed

+26
-0
lines changed

lib/helpers.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,8 @@ export function createItem(node, componentHolder = null, uri = null, extra = {})
353353

354354
getRealItem: () => componentHolder.get(),
355355

356+
getRealItemPromise: () => componentHolder.getPromise(),
357+
356358
...extra,
357359
};
358360

lib/models/ref-holder.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,19 @@ export default class RefHolder {
6565
return this.value;
6666
}
6767

68+
getPromise() {
69+
if (this.isEmpty()) {
70+
return new Promise(resolve => {
71+
const sub = this.observe(value => {
72+
resolve(value);
73+
sub.dispose();
74+
});
75+
});
76+
}
77+
78+
return Promise.resolve(this.get());
79+
}
80+
6881
map(block) {
6982
if (!this.isEmpty()) {
7083
return block(this.get());

test/models/ref-holder.test.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,17 @@ describe('RefHolder', function() {
5252
assert.isTrue(callback.calledWith(12));
5353
});
5454

55+
it('resolves a promise when it becomes available', async function() {
56+
const thing = Symbol('Thing');
57+
const h = new RefHolder();
58+
59+
const promise = h.getPromise();
60+
61+
h.setter(thing);
62+
assert.strictEqual(await promise, thing);
63+
assert.strictEqual(await h.getPromise(), thing);
64+
});
65+
5566
describe('.on()', function() {
5667
it('returns an existing RefHolder as-is', function() {
5768
const original = new RefHolder();

0 commit comments

Comments
 (0)