1
1
'use strict'
2
2
3
- const async = require ( 'async' )
4
3
const config = require ( './config' )
5
4
const logger = require ( './logger' )
6
5
const moment = require ( 'moment' )
@@ -11,38 +10,67 @@ class UpdateDirtyNoteJob {
11
10
}
12
11
13
12
start ( ) {
14
- setInterval ( this . updateDirtyNote . bind ( this ) , 1000 )
13
+ if ( this . timer ) return
14
+ this . timer = setInterval ( this . updateDirtyNotes . bind ( this ) , 1000 )
15
15
}
16
16
17
- updateDirtyNote ( ) {
17
+ stop ( ) {
18
+ if ( ! this . timer ) return
19
+ clearInterval ( this . timer )
20
+ this . timer = undefined
21
+ }
22
+
23
+ updateDirtyNotes ( ) {
18
24
const notes = this . realtime . getNotePool ( )
19
- async . each ( Object . keys ( notes ) , ( key , callback ) => {
25
+ Object . keys ( notes ) . forEach ( ( key ) => {
20
26
const note = notes [ key ]
21
- if ( ! note . server . isDirty ) return callback ( null , null )
27
+ this . updateDirtyNote ( note )
28
+ . catch ( ( err ) => {
29
+ logger . error ( 'updateDirtyNote: updater error' , err )
30
+ } )
31
+ } )
32
+ }
22
33
23
- if ( config . debug ) logger . info ( 'updater found dirty note: ' + key )
24
- note . server . isDirty = false
25
- this . realtime . updateNote ( note , ( err , _note ) => {
26
- // handle when note already been clean up
27
- if ( ! notes [ key ] || ! notes [ key ] . server ) return callback ( null , null )
28
- if ( ! _note ) {
29
- this . realtime . io . to ( note . id ) . emit ( 'info' , {
30
- code : 404
31
- } )
32
- logger . error ( 'note not found: ' , note . id )
33
- }
34
+ async updateDirtyNote ( note ) {
35
+ const notes = this . realtime . getNotePool ( )
36
+ if ( ! note . server . isDirty ) return
34
37
35
- if ( err || ! _note ) {
36
- this . realtime . disconnectSocketOnNote ( note )
37
- return callback ( err , null )
38
- }
38
+ if ( config . debug ) logger . info ( 'updateDirtyNote: updater found dirty note: ' + note . id )
39
+ note . server . isDirty = false
39
40
40
- note . updatetime = moment ( _note . lastchangeAt ) . valueOf ( )
41
- this . realtime . emitCheck ( note )
42
- return callback ( null , null )
41
+ try {
42
+ const _note = await this . updateNoteAsync ( note )
43
+ // handle when note already been clean up
44
+ if ( ! notes [ note . id ] || ! notes [ note . id ] . server ) return
45
+
46
+ if ( ! _note ) {
47
+ this . realtime . io . to ( note . id ) . emit ( 'info' , {
48
+ code : 404
49
+ } )
50
+ logger . error ( 'updateDirtyNote: note not found: ' , note . id )
51
+ this . realtime . disconnectSocketOnNote ( note )
52
+ }
53
+
54
+ note . updatetime = moment ( _note . lastchangeAt ) . valueOf ( )
55
+ this . realtime . emitCheck ( note )
56
+ } catch ( err ) {
57
+ logger . error ( 'updateDirtyNote: note not found: ' , note . id )
58
+ this . realtime . io . to ( note . id ) . emit ( 'info' , {
59
+ code : 404
60
+ } )
61
+ this . realtime . disconnectSocketOnNote ( note )
62
+ throw err
63
+ }
64
+ }
65
+
66
+ updateNoteAsync ( note ) {
67
+ return new Promise ( ( resolve , reject ) => {
68
+ this . realtime . updateNote ( note , ( err , _note ) => {
69
+ if ( err ) {
70
+ return reject ( err )
71
+ }
72
+ return resolve ( _note )
43
73
} )
44
- } , ( err ) => {
45
- if ( err ) return logger . error ( 'updater error' , err )
46
74
} )
47
75
}
48
76
}
0 commit comments