Интересно, есть ли общесистемный мьютекс в javascript (Не обычный мьютекс другими словами)?
У меня есть 2 или более запущенных экземпляра cmd node.js. Они будут читать и писать в один и тот же файл, и здесь я не хочу, чтобы они делали это одновременно.
Код выглядит следующим образом:
//Enter Systemwide Mutex here
var textarray = fs.readFileSync("C:/file1.txt").toString('utf-8'); //Read the file
fs.promises.writeFile("C:/file1.txt", "hello"); //Write to file
//Exit Systemwide Mutex hereЯ попытался использовать метод блокировки файлов (https://www.npmjs.com/package/proper-lockfile) Я установил с помощью: «npm i правильный-lockfile» Но я получаю сообщение об ошибке: TypeError: lockfile.lock не является функцией
const lockfile = require('C:/myproject/temp/lockfile.txt');
lockfile.lock('C:/myproject/temp/lockfile.txt')
.then((release) => {
// Do something while the file is locked
var textarray = fs.readFileSync("C:/myproject/file1.txt").toString('utf-8'); //Read the file
fs.promises.writeFile("C:/myproject/file1.txt", "hello now"); //Write to file
// Call the provided release function when you're done,
// which will also return a promise
return release();
});Спасибо, я посмотрю на это.
Я отредактировал свой пост с подходом lockfile, но получил ошибку: «TypeError: lockfile.lock не является функцией». Интересно, что может быть не так?
require('C:/myproject/temp/lockfile.txt') → require('proper-lockfile')Да вы правы, я просто заметил, что будут эксперименты. Я опубликую ответ. Спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете сделать, используя обещание
var p_readFile = new Promise(function(resolve, reject){
fs.readFile("C:/file1.txt", type, (err, d) => {
err ? reject(err) : resolve(d);
});
})
p_readFile.then(function(d){
console.info(d);
//Write Your Write file Syntax Here
fs.promises.writeFile("C:/file1.txt", "hello");
})
Является ли это общесистемным мьютексом. Будет ли он работать между двумя разными экземплярами cmd? Когда я запускаю код, я получаю: «UnhandledPromiseRejectionWarning: ReferenceError: тип не определен»
ооооо это то, что вы хотите сделать
Теперь я не уверен, будет ли это работать для двух разных экземпляров или только для одного? :)
Это рабочий код:
'use strict';
const fs = require('fs');
const lockfile = require('proper-lockfile');
lockfile.lock('C:/myproject/temp/lockfile.txt')
.then(() => {
// Do something while the file is locked
var textarray = fs.readFileSync("C:/myproject/file1.txt").toString('utf-8'); //Read the file
fs.promises.writeFile("C:/myproject/file1.txt", "hello now"); //Write to file
// Later..
return lockfile.unlock('C:/myproject/temp/lockfile.txt');
});
Взгляните на блокировку. Например. npmjs.com/package/proper-lockfile или github.com/npm/lockfile