Общесистемный мьютекс в node.js (javascript) - PullRequest
2 голосов
/ 15 марта 2019

Интересно, существует ли общесистемный мьютекс в javascript ( Не обычный мьютекс с другими словами )?

У меня есть 2 или более экземпляров команды node.js cmd.Они будут читать и записывать в один и тот же файл, и здесь я не хочу, чтобы они делали это в одно и то же время.

Код выглядит следующим образом:

//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 Proper-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();
    });

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

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

'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');
    });
0 голосов
/ 15 марта 2019

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

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.log(d); 
     //Write Your Write file Syntax Here
     fs.promises.writeFile("C:/file1.txt", "hello");
   })
...