虽然我指定了async / await,但该功能无法同步工作

时间:2019-05-21 13:45:49

标签: javascript

我想从数据文件夹中读取所有JSON文件。我使用库https://www.npmjs.com/package/node-dir。我有一个功能,但是不能同步工作。变量replacements呈现undefined

async function giveHtml() {
    let replacements = await dir.readFiles(__dirname + '/data', { match: /.json$/ }, (err, content, next) => {
        if (err) {
            throw err
        }
        next()
    })
    console.log(replacements)
    return replacements
}

我怎么了?

4 个答案:

答案 0 :(得分:4)

您只能await个承诺,dir.readFiles不返回承诺。

您可以convert it to use a promise或使用a module that already returns a promise

答案 1 :(得分:1)

dir.readFiles似乎没有返回承诺,它返回了undefined,这就是您得到的回报。您可以尝试像这样创建自己的承诺。

function giveHtml() {
  return new Promise((resolve, reject) => {
    dir.readFiles(__dirname + '/data', { match: /.json$/ }, (err, content, next) => {
      if (err) {
        return reject(err)
      }
      // do stuff per file if you want
      next()
    }, (err, files) => {
      if (err) {
        return reject(err)
      }
      resolve(files)
    })
  })
}

答案 2 :(得分:0)

我认为您的错误是关于不等待答复的; 您将在给出答案之前返回var替换。

我会尝试致电

console.log(replacements) 

在您

之后
next()

答案 3 :(得分:0)

async / await是JavaScript Promise的语法糖。 await正在侦听已解决的promise。在您使用的npm软件包中,readFiles函数可用于回调,而不是诺言。

改用promiseFiles函数调用:https://www.npmjs.com/package/node-dir#promisefiles-dir-callback-