我试图将文件读作JSON,操纵JSON,然后将操纵的JSON返回到flatten函数。以下是我的承诺和我的扁平化功能。
无极
const fs = require('fs');
module.exports = (filePath) => {
return new Promise((fulfill, reject) => {
fs.readFile(filePath, 'utf8', (err, res) => {
if (err) reject(err);
else fulfill(res);
});
});
};
拼合功能
flatten: (baseLoc, filePath, updateRev) => {
return readFilePromise(filePath)
.then((data) => {
const jsonObject = Object.assign({}, data);
const flatJson = flattener(jsonObject, baseLoc);
if (flatJson.$meta) {
delete flatJson.$meta;
}
if (updateRev === true || updateRev === 'true') {
flatJson.id = incrementVersion(flatJson.id);
}
return flatJson;
})
.catch(err => err);
}
我在回复承诺时得到了{}。如果我没有返回promise,而是依赖于return flatJson语句,我会得到未定义的。我不确定为什么会发生这种情况,因为从我在StackOverflow / Google上看到的所有内容来看,我的所有内容都是正确的。
奇怪的是,如果我通过代码调试,我可以看到返回的flatJson语句实际上保存了我正在寻找的值,它只是当另一个函数调用flatten函数时,我最终未定义或{}。
答案 0 :(得分:0)
您只能在异步上下文中使用await关键字以同步方式获取异步函数的结果,如下所示:
async function getResultDirect(req, res) {
let result = await flatten(baseLoc, filePath, updateRev);
return result;
}
但是这只是将异步性隐藏在堆栈中的一个级别。别无他法。