我正在加密一組檔案并使用節點流來加密塊中的檔案。我想在對陣列中的所有檔案進行加密后運行一個函式,但我的函式在加密完成之前運行。我正在使用 preload.js 來公開加密功能。
//encrypt.js
const path = require("path");
const fs = require("fs");
const { pipeline } = require("stream/promises");
const { app } = require("./app.js");
async function encrypt(file) {
const fileReadStream = fs.createReadStream(file);
const filePath = path.parse(file).dir;
const fileName = path.parse(file).name;
const fileExt = path.parse(file).ext;
const EncFile = filePath "/" fileName "_enc" fileExt;
const fileWriteStream = fs.createWriteStream(EncFile);
await pipeline(
fileReadStream,
new Transform({
transform(chunk, encoding, callback) {
const encryptedData = app.encrypt(chunk, password);
callback(null, encryptedData);
console.log("File encrypted");
},
}),
fileWriteStream
);
}
module.exports.encrypt = encrypt;
//preload.js
const { encrypt } = require('./encrypt.js');
contextBridge.exposeInMainWorld('encrypt', encrypt);
const para = document.querySelector('#para-info');
const btn = document.querySelector('#btn');
btn.addEventListener("click", () => {
filesList.map(file => {
window.encrypt(file, password);
});
done();
}
// function i want to run after encryption is done
function done(){
para.innerText = 'Encryption Done';
}
uj5u.com熱心網友回復:
功能是async:
async function encrypt(file) {
但它沒有被等待:
filesList.map(file => {
window.encrypt(file, password);
});
done();
一種方法是在一個async函式中完成所有這些以利用await:
let myFunc = async () => {
for (let file of filesList) {
await window.encrypt(file, password);
}
done();
};
myFunc();
或者捕獲生成的Promise物件并等待所有物件:
let promises = filesList.map(file => {
return window.encrypt(file, password);
});
Promise.all(promises).then(() => done());
uj5u.com熱心網友回復:
你可以讓你點擊處理程式作為異步函式
const para = document.querySelector('#para-info');
const btn = document.querySelector('#btn');
btn.addEventListener("click", async () => {
const promises = filesList.map(file => window.encrypt(file, password);
// Waits for every promise in list
await Promise.all(promises);
done();
}
// function i want to run after encryption is done
function done(){
para.innerText = 'Encryption Done';
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/526103.html
上一篇:遞回渲染樹專案
