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

Commit fed40eb

Browse files
author
Max Brunsfeld
authored
Merge pull request #254 from atom/mb-async-on-will-save-hook
Wait for promises returned by `onWillSave` handlers before saving
2 parents 472326a + e5ad19f commit fed40eb

File tree

4 files changed

+35
-18
lines changed

4 files changed

+35
-18
lines changed

package-lock.json

Lines changed: 15 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
"delegato": "^1.0.0",
5151
"diff": "^2.2.1",
5252
"emissary": "^1.0.0",
53-
"event-kit": "^2.1.0",
53+
"event-kit": "^2.4.0",
5454
"fs-admin": "^0.1.4",
5555
"fs-plus": "^3.0.0",
5656
"grim": "^2.0.1",

spec/text-buffer-io-spec.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,21 @@ describe('TextBuffer IO', () => {
238238
})
239239
})
240240

241+
it('waits for any promises returned by ::onWillSave observers', (done) => {
242+
buffer.onWillSave(() => new Promise((resolve) => {
243+
setTimeout(() => {
244+
buffer.append(' - updated')
245+
resolve()
246+
}, 50)
247+
}))
248+
249+
buffer.setText('Buffer contents')
250+
buffer.save().then(() => {
251+
expect(fs.readFileSync(filePath, 'utf8')).toBe('Buffer contents - updated')
252+
done()
253+
})
254+
})
255+
241256
describe('when the buffer is destroyed before the save completes', () => {
242257
it('saves the current contents of the buffer to the path', (done) => {
243258
buffer.setText('hello\n')

src/text-buffer.coffee

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1561,11 +1561,13 @@ class TextBuffer
15611561
destination = file.createWriteStream()
15621562
directoryPromise = Promise.resolve()
15631563

1564-
@emitter.emit 'will-save', {path: filePath}
15651564
@outstandingSaveCount++
15661565

15671566
directoryPromise
1568-
.then => @buffer.save(destination, @getEncoding())
1567+
.then =>
1568+
@emitter.emitAsync 'will-save', {path: filePath}
1569+
.then =>
1570+
@buffer.save(destination, @getEncoding())
15691571
.catch (error) =>
15701572
if process.platform is 'darwin' and error.code is 'EACCES' and destination is filePath
15711573
fsAdmin = require('fs-admin')

0 commit comments

Comments
 (0)