Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试将zlib deflate包装为异步等待_Javascript_Async Await - Fatal编程技术网

Javascript 尝试将zlib deflate包装为异步等待

Javascript 尝试将zlib deflate包装为异步等待,javascript,async-await,Javascript,Async Await,我正试图重构一些代码来删除。然后金字塔,我需要一些帮助 我正在尝试压缩一个JSON主体以传递到一个获取调用中。实际上,我已经处理了这个问题,并使用zlib回调调用了fetch,但是代码变得很混乱 因此,我一直在考虑在异步等待包装器中包装zlib调用。例如 async function syncCompressBody(body) { //return await compressBody(body); const compressedData = await compressBody(

我正试图重构一些代码来删除。然后金字塔,我需要一些帮助

我正在尝试压缩一个JSON主体以传递到一个获取调用中。实际上,我已经处理了这个问题,并使用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函数返回一个承诺。拒绝和解析调用在zlib.deflate的回调中

实际上,我使用JSON调用syncCompressBody进行压缩。返回的值是来自compressBody的resolve调用的结果

这两个函数位于助手库中。在我的网页中,作为提交操作的一部分,我已经

  console.log(jsonContent);
  const compressedBody = syncCompressBody(jsonContent);
  console.log(compressedBody);

  console.log("should be zipped by now..." + compressedBody);
但是,“应压缩”消息显示在compressBody函数中显示的“压缩”消息之前。我真正想要的是在syncCompressBody中等待代码,然后在submit操作中返回并恢复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") ; 
}
首先显示pre-comment,然后是waitstyle2start,然后是firstasyncfunctionx函数中的控制台日志消息,然后是post-message


我现在可以明白为什么我的代码会有竞赛条件,我在正确的轨道上吗?

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

异步函数sync…
真的没有意义,是吗?
compressedBody=wait syncCompressBody(jsonContent)“我实际上调用了syncCompressBody,返回的值就是结果”-否。
异步函数的返回值是一个承诺。这是有意义的,因为不能使zlib同步。你仍然需要等待它。如果你不等待,你就无法得到结果。如果你不能使用wait,你需要处理结果承诺,或者不等待结果