我试图重构一些代码以删除。然后我需要一些帮助。
我试图压缩JSON正文以传入fetch调用。我已经实际管理了这个,并使用zlib回调调用了fetch,但代码变得混乱。
所以,我一直在寻找在异步await包装器中包装zlib调用。 E.g。
async function syncCompressBody(body) {
//return await compressBody(body);
const compressedData = await compressBody(body);
console.log("compressedData");
console.log(compressedData);
return compressedData;
}
function compressBody(body) {
return new Promise( function( resolve, reject ) {
zlib.deflate(body, (err, buffer) => {
if(err){
console.log("Error Zipping");
reject(err);
}
console.log("Zipped");
resolve(buffer);
});
});
}
compressBody函数返回一个promise。拒绝和解析调用在zlib.deflate的回调中。
我实际上使用JSON调用syncCompressBody进行压缩。返回的值是来自compressBody的解析调用的结果。
这两个函数位于辅助库中。在我的网页中,作为提交操作的一部分,我有......
console.log(jsonContent);
const compressedBody = syncCompressBody(jsonContent);
console.log(compressedBody);
console.log("should be zipped by now..." + compressedBody);
然而,'应该压缩'消息显示在' zipped'之前您可以在compressBody函数中看到的消息。我真正想要的是在返回并在提交操作中恢复JS之前,在syncCompressBody中等待代码。
按照反馈编辑....
基于Bergi和Liam的评论,我想出了几个等待的例子,每个函数都依赖于前一个函数....
function awaitStyle2x(){
console.log("pre-awaitStyle2 start");
(async () => {
console.log("awaitStyle2 start")
const t = await theFirstAsyncFunctionX("pass it on");
const u = await theNextAsyncFunctionX(t);
const v = await aThirdAsyncFunctionX(u);
console.log("awaitStyle2 finshed - " + v)
})().catch(e => { /* handle the error */});
console.log("post-awaitStyle2 finished") ;
}
首先显示预注释,然后显示awaitStyle2 start,然后显示功能theFirstAsyncFunctionX中的控制台日志消息,然后显示post-message。
我现在可以看到为什么我的代码有竞争条件,我是否在正确的轨道上?
答案 0 :(得分:0)
我在gzip
中有一个类似的用例,请问这是否有帮助:
const util = require('util');
const zlib = require('zlib');
const deflate = util.promisify(zlib.deflate);
console.log(jsonContent);
const compressedBody = await deflate(jsonContent);
console.log(compressedBody);
console.log("should be zipped by now..." + compressedBody);