我想从数据文件夹中读取所有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
}
我怎么了?
答案 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-