Closed yasunori0418 closed 2 years ago
想像だけど以下の順で実行されてます ・1つ目のopenServerが await denops.call に達する ・制御が戻ってきて2つ目のopenServerが走る ・2つ目のopenServerが await denops.call に達する ・制御が返ってくるも2つともサーバーが起動しているかの判定は終わってしまっている 20:39 https://github.com/kat0h/bufpreview.vim/blob/98f3222202fc58d5f7d741222f6daefa7a841e3d/denops/bufpreview/main.ts#L36 awaitはこれです、この位置に無ければ2つ開かれることは無かったはず main.ts await denops.call("bufnr") as number, https://github.com/kat0h/bufpreview.vim|kat0h/bufpreview.vimkat0h/bufpreview.vim | 投稿したメンバー: GitHub kuuote
diff --git a/denops/bufpreview/main.ts b/denops/bufpreview/main.ts
index 1dcc82d..76b9ea6 100644
--- a/denops/bufpreview/main.ts
+++ b/denops/bufpreview/main.ts
@@ -2,6 +2,7 @@ import { Denops, ensureString, fn, op, open, vars } from "./lib/deps.ts";
import Server from "./lib/server.ts";
+let isServerRunning: boolean = false
// 一度に開けるサーバーは一つ
let server: Server | undefined;
@@ -27,6 +28,10 @@ export function main(denops: Denops) {
// サーバーを開く
const openServer = async () => {
+ if (isServerRunning) {
+ return
+ }
+ isServerRunnig = true
// サーバーが既に開かれているなら
if (server != undefined) {
server.close();
@@ -36,6 +41,7 @@ export function main(denops: Denops) {
await denops.call("bufnr") as number,
() => {
server = undefined;
+ isServerRunning = false;
},
);
server.run(host, port);
これで一応解決 runの過去形はranです
場当たり的な対応で申し訳ないのですが、startServerの呼び出し中に再度呼ばれて開いてしまう挙動を修正しました
96b324b efe2eea このコミットで最小構成と本環境で確認しました。
問題なく動作しています。
対応ありがとうございます!!
環境
最小構成 こちらのリポジトリをクローンして貰ったあと、bufpreviewブランチに切り替えて以下のコマンドを実行してください。
実行後は
./nvim.mcdl.sh
でローカル環境の構築と実行をしますので、再起動させて試しにリポジトリのREADME.md
を開いてみてください。