gpt4 book ai didi

javascript - 试图将 zlib deflate 包装成异步等待

转载 作者:行者123 更新时间:2023-12-01 08:48:16 25 4
gpt4 key购买 nike

我正在尝试重构一些代码以删除 .then 金字塔,我需要一些帮助。

我正在尝试压缩 JSON 正文以传递给 fetch 调用。我实际上已经解决了这个问题,并使用 zlib 回调调用了 fetch,但是代码变得困惑了。

所以,我一直在考虑将 zlib 调用包装在异步等待包装器中。例如。

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);

但是,“应该压缩”消息显示在您可以在 compressBody 函数中看到的“压缩”消息之前。我真正想要的是代码在 syncCompressBody 中等待,然后返回并恢复提交操作中的 JS。

修改后反馈....

根据 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 启动,然后是函数 theFirstAsyncFunctionX 中的控制台日志消息,然后是后消息。

我现在可以看到为什么我的代码有竞争条件,我在正确的轨道上吗?

最佳答案

我有一个与 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);

关于javascript - 试图将 zlib deflate 包装成异步等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49027949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com