我正在製作一個基於Web的工具,掛鉤到一個名爲RetroPie-Setup的現有基於shell的框架。NodeJS隊列多個execFile調用
他們有一個名爲/RetroPie-Setup/retropie_packages.sh的shell腳本,您可以使用它來安裝,獲取依賴關係,甚至編譯不同的程序。
一個問題是packages.sh不應該在給定的時刻運行多次,所以我需要設置一個一次運行一個的隊列。
我想我可以使用promise-queue來防止多次執行,但是每當我運行execFile時,它都會立即運行該命令,而不是在它到達隊列中的某個位置時運行該命令。
這裏是我的示例代碼:
downloadTest.sh
(下載一個10Mb的文件具有唯一名稱):
filename=test$(date +%H%M%S).db
wget -O ${filename} speedtest.ftp.otenet.gr/files/test10Mb.db
rm ${filename}
節點編號:
const Queue = require('promise-queue')
const { spawn,execFile } = require('child_process');
var maxConcurrent = 1;
var maxQueue = Infinity;
var que = new Queue(maxConcurrent, maxQueue);
var testFunct = function(file)
{
var promise = new Promise((reject,resolve) => {
execFile(file,function(error, stdout, stderr) {
console.log('Finished executing');
if(error)
{
reject();
} else
{
resolve(stdout);
}
});
})
return promise;
}
var test1 = testFunct('/home/pi/downloadTest.sh')
var test2 = testFunct('/home/pi/downloadTest.sh')
var test3 = testFunct('/home/pi/downloadTest.sh')
que.add(test1);
que.add(test2);
que.add(test3);