denoでファイルをロックする
from 2024/11/24
denoで編集ロックするbsahd.icon
FsFile.lock lock(exclusive?: boolean): Promise<void>でできる
exclusiveがtrueだと読み込みも禁止になる
AIに聞こう
「ES6で」と指示したのにasync/awaitを使ってきた
code:read.js
function convertStreamToString(readableStream) {
const reader = readableStream.getReader()
let result = ''
function processResult(chunk) {
if (chunk.done) {
return Promise.resolve(result)
}
result += new TextDecoder().decode(chunk.value)
return reader.read().then(processResult)
}
return reader.read().then(processResult)
}
code:write.js
function writeString(writer:WritableStreamDefaultWriter<Uint8Array>,str: string) {
const encoder = new TextEncoder();
const data = encoder.encode(str);
let offset = 0;
function writeChunk(): Promise<void> {
if (offset >= data.length) {
return Promise.resolve();
}
const chunk = data.slice(offset, offset + 1024);
offset += 1024;
return writer.ready
.then(() => writer.write(chunk))
.then(() => {
if (writer.desiredSize && writer.desiredSize < 0) {
return writer.ready;
}
})
.then(writeChunk);
}
return writeChunk();
}
開始処理と終了処理は同期でもよくね?
どうせ後続の処理をブロックするんだし
起動が非同期だと全体のインデントが一つ下がっちゃう(promiseでも)
コールバック: 入れ子が深くなる
Promise: 結果データの取り回し
https://gyazo.com/3d865ef8e9eed6fe4bc6fa7c6c2e4841
async/await: 一見同期的に見えて問題が多いので嫌い
例えば、非同期関数に処理を渡してるときに他の関数が動いてグローバル変数が書き換えられるなど
グローバル変数をスレッドセーフにしなきゃいけない
切り出しthanks
タスクマネージャーの「関係の設定」という機能を試してみる
https://gyazo.com/ce6f4ce5699845f8b709ea04cae1cef0