236
*/
237
export function autorunSelfDisposable(fn: (reader: IReaderWithDispose) => void, debugLocation = DebugLocation.ofCaller()): IDisposable {
239
>
let disposed = false;
240
>
241
>
// eslint-disable-next-line prefer-const
242
>
ar = autorun(reader => {
243
>
fn({
244
>
delayedStore: reader.delayedStore,
245
>
store: reader.store,
246
>
readObservable: reader.readObservable.bind(reader),
247
>
dispose: () => {
248
>
ar?.dispose();
249
>
disposed = true;
250
>
}
251
>
});
252
>
}, debugLocation);
253
>
254
>
if (disposed) {
255
>
ar.dispose();
256
>
}
257
>
258
>
return ar;
259
>
}
260
261