Javascript 从承诺中的.then()返回值?
我试图将一个文件读取为JSON,操纵JSON,然后将操纵后的JSON返回给flatte函数。下面是我的承诺和我的展平功能 承诺Javascript 从承诺中的.then()返回值?,javascript,json,node.js,asynchronous,fs,Javascript,Json,Node.js,Asynchronous,Fs,我试图将一个文件读取为JSON,操纵JSON,然后将操纵后的JSON返回给flatte函数。下面是我的承诺和我的展平功能 承诺 const fs = require('fs'); module.exports = (filePath) => { return new Promise((fulfill, reject) => { fs.readFile(filePath, 'utf8', (err, res) => { if (err) reject(e
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);
}
我在还清诺言时得到一个{}。如果我不返回承诺,而是依赖return-flatJson语句,那么我就没有定义。我不确定为什么会发生这种情况,因为从我在StackOverflow/Google上看到的一切来看,我已经正确地构建了一切
奇怪的是,如果我调试代码,我可以看到return flatJson语句实际上保存了我要查找的值,只是当另一个函数调用flatte函数时,我得到了一个未定义的或{} 您只能在异步上下文中使用await关键字获得同步样式的异步函数的结果,如下所示:
async function getResultDirect(req, res) {
let result = await flatten(baseLoc, filePath, updateRev);
return result;
}
但这只是将异步性隐藏了一层。没有其他办法。无论你在这方面做了多少承诺,你永远都不会得到
展平
来返回展平的结果。它将返回一个承诺,或者接受稍后调用的回调,并返回结果。您如何调用它?类似于flatte(…).then(JSON.stringify).then(send)
?@Bergi我从一个单独的文件调用它,名为app.flatte(params)
,我是否需要将flatte设置为承诺,以便使用您提供的语法?我对承诺还比较陌生,如果这些都是noob,我很抱歉questions@KevinB我是否也需要将展平设置为承诺?如何使用我想要返回的数据?我对承诺比较陌生,他们对我有点苛刻。@Steve你发布的代码应该能做到这一点。