导出 const 异步函数 => 将结果分配给 const

Export const async function => assign the result to a const

我正在尝试将异步函数的结果存储到 const 但没有成功。

代码: 这里工作正常,return 转换后的 json

import pako from 'pako';

export const unzipFile = async (json_to_unzip) => {
  try {
    // fetch file with CORS enabled
    const res = await fetch(json_to_unzip, {
      mode: 'cors',
    });
    // convert to arrayBuffer for further processing
    const buf = await res.arrayBuffer();
    // and convert blob to arrayBuffer using `await blob.arrayBuffer()`
    console.log('input size: ', buf.byteLength);
    // decompress file
    const outBuf = pako.inflate(buf);
    console.log('output size: ', outBuf.byteLength);
    // convert arrayBuffer to string
    const str = new TextDecoder().decode(outBuf);
    // print json object
    const unzippedFile = JSON.parse(str);
    console.log('json object', unzippedFile[0]);
    return unzippedFile[0];
  } catch (err) {
    console.error('unable to decompress', err);
  }
};

从这里我想把它存储到一个常量中:

const emissions = (async () => {
      const res = await unzipFile(emissions_json);
      return res;
    })();

const emissions = unzipFile(emissions_json).then(res => res)

console.log(排放量)在这两种情况下仍然return是未决的承诺

Async functions always return a promise. If the return value of an async function is not explicitly a promise, it will be implicitly wrapped in a promise.

文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

emissions 是一个 promise,因为它持有从异步匿名函数返回的 promise 对象。要console.log你可以做的结果:

emissions.then(res => console.log(res))

发生这种情况是因为您试图管理异步操作的结果,因此您不能将其视为同步操作。话虽如此,要将结果存储到 const 中,您需要像使用 await 关键字或使用 Promise.then() 处理程序一样在适当的异步函数中执行此操作:

unzipFile(emissions_json).then(res => {
 //logic for using the res 
})