这个问题在这里已有答案:
我正在尝试创建一个返回JSON.parse结果的函数 . 以下是示例代码:
function test(raw) {
return JSON.parse(raw);
}
// assume I provide valid raw_input...
console.log(test(raw_input));
// expect json object but it says "undefined"...
我想我知道为什么(如果我错了请纠正我) . JSON.parse不是异步的......它在准备好后返回结果 . 并且console.log不会等待它的结果...更像是console.log认为它已经完成,所以它说“未定义” .
这是我的问题......你如何制作JSON.parse承诺?还是异步?就像你怎么能在函数中“返回”来等待JSON.parse的结果?
如果你能提供简单的承诺代码......那将非常有帮助 . 非常感谢你提前 . (我对bluebird js或async / await等开放......)
添加代码(更多关于原始代码)
在函数中,我正在读取json文件,然后是JSON.parse它,然后返回结果 . (source是json文件的路径)
function test(source) {
fs.readFile(source, function (err, content) {
return JSON.parse(content));
});
}
console.log(test('test.json'));
// it says
// undefined
json文件看起来像这样(test.json)
{
"a": "apple",
"b": "banana",
"c": "cat"
}
1 回答
JSON.parse()
确实是同步的,因此是console.log()
,return语句也是如此 . 除非您明确地使其异步,否则Javscript中的所有内容都是同步的(并且是单线程的) .你得到一个
undefined
,因为你在raw
传递给JSON.parse()
的任何东西实际上都不是一个字符串 .这是一个显示它同步运行的实例 .