Системный мьютекс в node.js (javascript)

Интересно, есть ли общесистемный мьютекс в 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();
    });

Взгляните на блокировку. Например. npmjs.com/package/proper-lockfile или github.com/npm/lockfile

idmean 15.03.2019 09:34

Спасибо, я посмотрю на это.

Andreas 15.03.2019 09:54

Я отредактировал свой пост с подходом lockfile, но получил ошибку: «TypeError: lockfile.lock не является функцией». Интересно, что может быть не так?

Andreas 15.03.2019 10:07
require('C:/myproject/temp/lockfile.txt')require('proper-lockfile')
idmean 15.03.2019 10:25

Да вы правы, я просто заметил, что будут эксперименты. Я опубликую ответ. Спасибо!

Andreas 15.03.2019 10:27
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
5
803
2

Ответы 2

Вы можете сделать, используя обещание

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: тип не определен»

Andreas 15.03.2019 09:46

ооооо это то, что вы хотите сделать

Sourabh Somani 15.03.2019 09:47

Теперь я не уверен, будет ли это работать для двух разных экземпляров или только для одного? :)

Andreas 15.03.2019 09:49

Это рабочий код:

'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');
    });

Другие вопросы по теме