async _findDiagnostics(filePath: string): Promise<?Array<ArcDiagnostic>> { const blacklistedLinters: Array<string> = (featureConfig.get('nuclide-arcanist.blacklistedLinters'): any); const runningProcess = this._runningProcess.get(filePath); if (runningProcess != null) { // This will cause the previous lint run to resolve with `undefined`. runningProcess.complete(); } const arcService = getArcanistServiceByNuclideUri(filePath); const subject = new Subject(); this._runningProcess.set(filePath, subject); const subscription = arcService.findDiagnostics(filePath, blacklistedLinters) .refCount() .toArray() .timeout((featureConfig.get('nuclide-arcanist.lintTimeout'): any)) .subscribe(subject); return subject .finally(() => { subscription.unsubscribe(); this._runningProcess.delete(filePath); }) .toPromise(); }