当前位置: 首页 > 知识库问答 >
问题:

Async/Await是读取文件[duplicate]时唯一有效的Async func

丌官坚秉
2023-03-14

我试图使用Async/Await读取一个JSON文件,我创建了基于示例的本机Async/Await方法,结果出现了这个错误。

SyntaxError:await仅在异步函数中有效

这是我的密码。

const fs = require('fs-extra');
const xml2js = require('xml2js');  
const parser = new xml2js.Parser();

const path = "file.json";

function parseJM() {
return new Promise(function (resolve, reject) {
    fs.readFile(path, { encoding: 'utf-8'}, (err, data) => {
        if (err) { reject(err); }
        else {
            resolve (parser.parseString(data.replace(/<ent_seq>[0-9]*<\/ent_seq>/g, "")
             .replace(/&(?!(?:apos|quot|[gl]t|amp);|#)/g, '')));
        }
    });
});
}

const var1 = await parseJM();
console.log(var1);

我的代码有什么问题?我的节点版本是11.9。0,我的npm版本是6.7。0,我正在使用Arch Linux。

共有2个答案

易元青
2023-03-14

错误本身正告诉您问题是什么。您只能在标记为异步的函数中等待。

如果这是您的顶级代码,您可以使用asynciLife:

;(async () => {
  try {
    await doSomething()  
  } catch (err) {
    console.error(err)
  }
})()

或者只是然后/抓住它。

doSomething() 
  .then(result => {
    console.log(result)
  })
  .catch(err => {
    console.error(err)
  })
范安歌
2023-03-14

您需要在异步函数中调用wait。

(async () => {
    try {
        const var1 = await parseJM();
        console.log(var1);
    } catch (e) {
        console.error(e.message);
    }
})();

编辑:根据@Nik Kyriakides的建议

 类似资料:
  • 问题内容: 我无法弄清楚/的运作方式。我对此有些了解,但无法使其正常工作。 我知道我可以使用,但是如果这样做,我知道我永远不会理解/ 我只会埋葬这个问题。 目标:调用并返回文件的内容。 每次调用该文件都会增加一次(每页加载)。该文件包含二进制缓冲区的转储,并存储在SSD中。 无论我做什么,都会出现错误或在控制台中。 问题答案: 要使用/,您需要返回承诺的方法。没有包装器,核心API函数就不会这样做

  • Async/await 是以更舒适的方式使用 promise 的一种特殊语法,同时它也非常易于理解和使用。 Async function 让我们以 async 这个关键字开始。它可以被放置在一个函数前面,如下所示: async function f() { return 1; } 在函数前面的 “async” 这个单词表达了一个简单的事情:即这个函数总是返回一个 promise。其他值将自动被

  • 在第一章节,我们简要介绍了async/.await,并用它来构建一个简单的服务器。本章将更为详细讨论async/.await的它如何工作以及如何async代码与传统的 Rust 程序不同。 async/.await是 Rust 语法的特殊部分,它使得可以 yield 对当前线程的控制而不是阻塞,从而允许在等待操作完成时,其他代码可以运行。 async有两种主要的使用方式:async fn和asyn

  • 用asyncio提供的@asyncio.coroutine可以把一个generator标记为coroutine类型,然后在coroutine内部用yield from调用另一个coroutine实现异步操作。 为了简化并更好地标识异步IO,从Python 3.5开始引入了新的语法async和await,可以让coroutine的代码更简洁易读。 请注意,async和await是针对coroutin

  • 我在NodeJS中看到过从本地读取JSON文件不同方法。像这样; > 方法 使用fs库 方法 使用require() 方法 使用Ajax请求如何使用Jquery和Ajax从JSON文件中检索数据? 可能还有别的办法。但是我听说使用方法1读取JSON文件比其他方法更有效。

  • async/.await 是 Rust 的内置工具,用于编写看起来像同步代码的异步函数。async将一个代码区块,转换为实现称为 Future trait 的状态机。而在同步方法中,调用阻塞函数将阻塞整个线程,Futures 将 yield 对线程的控制权,允许其他Future运行。 要创建异步功能,您可以使用async fn语法: async fn do_something() { ... }