Могу ли я записать несколько раз в файл асинхронно в deno? - PullRequest
0 голосов
/ 23 марта 2020

Документация nodejs гласит следующее об этой проблеме:

Небезопасно несколько раз использовать fs.write () для одного и того же файла, не дожидаясь перезвонить. Для этого сценария рекомендуется fs.createWriteStream ().

Теперь я не могу найти ничего об этом в документации deno, и я хотел бы знать, не советует ли deno также делать несколько записывает в один и тот же файл с короткой частотой или если они обрабатывают его по-разному через Rust. Если они советуются с этим, каков рекомендуемый способ решить эту проблему?

Спасибо!

1 Ответ

1 голос
/ 03 апреля 2020

Asyn c write без ожидания выполнения обещания небезопасно и для deno.

Для практической демонстрации:

// If safe the file content would be ABCDEFGHIJ
async function main() {
  let n = new Uint8Array(1);
  const file = await Deno.open("bar.txt", { write: true, create: true });
  for (var i = 65; i < 75; i++) {
    n[0] = i;

    Deno.write(file.rid, n);
  }
}

main();

на моей linux коробке bar.txt содержимое не ABCDEFGHIJ, а `JJ '.

Обратите внимание, что этот конкретный пример на самом деле показывает две проблемы:

  • нет безопасного доступа к файловому ресурсу при использовании Deno.write без await
  • совместное использование одного и того же последнего i l oop значения переменной J между write() вызовами.
...