jszip 在处理数据之前等待创建 zip
jszip wait for creation of zip before working with data
正在使用 JSZip 的 nodejs 实现创建二进制字符串格式的 zip 文件并将其值存储在全局变量中,但是尽管使用 async/await zipstring 在压缩过程完成之前被打印出来,
到目前为止,这是我的代码:
const JSZip = require("jszip");
const zip = new JSZip();
let s="not yet done";
let zipstring = "";
async function dozipping() {
zip.file("Hello.txt", "Hello World\n");
zip.generateAsync({ type: "binarystring" })
.then(function(content) {
console.log("doing");
zipstring = content;
});
}
async function status() {
console.log(s)
await dozipping();
console.log(zipstring)
s = "done";
console.log(s)
}
status();
预期输出
not yet done
doing
*zipstring value*
done
我目前得到的输出
not yet done
done
doing
我是 node 的新手,第一次使用 jszip,文档有点混乱,如果问题太小,提前道歉
这是因为 zip.generateAsync 中的 .then 不会停止执行。你将需要使用
zipstring = await zip.generateAsync(...);
Await 暂停异步函数的执行,直到 promise 得到解决。
你一无所获的原因是 promises 是异步的,一旦异步任务完成且状态为 fulfilled
或 rejected
,它们就会被调用。我对它做了一些修改:
const zip = new JSZip();
let s="not yet done";
let zipstring = "";
async function dozipping(){
zip.file("Hello.txt", "Hello World\n");
try {
console.log("doing");
const response = await zip.generateAsync({type:"binarystring"});
zipstring = response;
return response;
} catch (error) {
console.error(error);
}
}
async function status(){
try {
console.log(s)
await dozipping();
console.log(zipstring)
s="done";
console.log(s)
} catch (error) {
console.error(error);
}
}
await status();
我建议您先了解一下 promise 的工作原理以及 async\await
应该如何使用。它们只是它的语法糖。我正在通过它们附加 link。
正在使用 JSZip 的 nodejs 实现创建二进制字符串格式的 zip 文件并将其值存储在全局变量中,但是尽管使用 async/await zipstring 在压缩过程完成之前被打印出来,
到目前为止,这是我的代码:
const JSZip = require("jszip");
const zip = new JSZip();
let s="not yet done";
let zipstring = "";
async function dozipping() {
zip.file("Hello.txt", "Hello World\n");
zip.generateAsync({ type: "binarystring" })
.then(function(content) {
console.log("doing");
zipstring = content;
});
}
async function status() {
console.log(s)
await dozipping();
console.log(zipstring)
s = "done";
console.log(s)
}
status();
预期输出
not yet done
doing
*zipstring value*
done
我目前得到的输出
not yet done
done
doing
我是 node 的新手,第一次使用 jszip,文档有点混乱,如果问题太小,提前道歉
这是因为 zip.generateAsync 中的 .then 不会停止执行。你将需要使用
zipstring = await zip.generateAsync(...);
Await 暂停异步函数的执行,直到 promise 得到解决。
你一无所获的原因是 promises 是异步的,一旦异步任务完成且状态为 fulfilled
或 rejected
,它们就会被调用。我对它做了一些修改:
const zip = new JSZip();
let s="not yet done";
let zipstring = "";
async function dozipping(){
zip.file("Hello.txt", "Hello World\n");
try {
console.log("doing");
const response = await zip.generateAsync({type:"binarystring"});
zipstring = response;
return response;
} catch (error) {
console.error(error);
}
}
async function status(){
try {
console.log(s)
await dozipping();
console.log(zipstring)
s="done";
console.log(s)
} catch (error) {
console.error(error);
}
}
await status();
我建议您先了解一下 promise 的工作原理以及 async\await
应该如何使用。它们只是它的语法糖。我正在通过它们附加 link。