异步/等待仅在读取文件时有效的异步函数

时间:2019-02-08 12:35:20

标签: javascript node.js asynchronous

我试图使用Async / Await读取JSON文件,创建了基于Native async/await approach的示例,但出现了此错误。

  

SyntaxError:等待仅在异步功能中有效

这是我的代码。

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 个答案:

答案 0 :(得分:3)

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

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

编辑:如@Nik Kyriakides所建议

答案 1 :(得分:2)

错误本身告诉您问题的确切原因。您只能在标记为await的函数内async

如果这是您的顶级代码,则只需使用async IIFE

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

或仅then / catchasync个函数毕竟返回一个Promise

doSomething() 
  .then(result => {
    console.log(result)
  })
  .catch(err => {
    console.error(err)
  })