Skip to content

Commit c1a2e68

Browse files
committed
Improving the implementation of DoneHandle
1 parent e1957e2 commit c1a2e68

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

src/webcore/promise.rs

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ use super::promise_future::PromiseFuture;
1616
/// See the documentation for [`done`](struct.Promise.html#method.done) for more information.
1717
#[derive( Debug, Clone )]
1818
pub struct DoneHandle {
19-
callback: Value,
20-
done: Value,
19+
state: Value,
2120
}
2221

2322
impl Cancel for DoneHandle {
2423
fn cancel( &mut self ) {
2524
js! { @(no_return)
26-
@{&self.done}[0] = true;
27-
@{&self.callback}.drop();
25+
var state = @{&self.state};
26+
state.cancelled = true;
27+
state.callback.drop();
2828
}
2929
}
3030
}
@@ -146,29 +146,30 @@ impl Promise {
146146
callback( value );
147147
};
148148

149-
let callback = js!( return @{Once( callback )}; );
149+
let state = js!(
150+
var callback = @{Once( callback )};
150151

151-
let done = js!(
152-
var callback = @{&callback};
153-
var done = [ false ];
152+
var state = {
153+
cancelled: false,
154+
callback: callback
155+
};
154156

155157
// TODO don't swallow any errors thrown inside callback
156158
@{self}.then( function ( value ) {
157-
if ( !done[0] ) {
159+
if ( !state.cancelled ) {
158160
callback( value, true );
159161
}
160162
}, function ( value ) {
161-
if ( !done[0] ) {
163+
if ( !state.cancelled ) {
162164
callback( value, false );
163165
}
164166
} );
165167

166-
return done;
168+
return state;
167169
);
168170

169171
CancelOnDrop::new( DoneHandle {
170-
callback,
171-
done,
172+
state,
172173
} )
173174
}
174175

0 commit comments

Comments
 (0)