Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何做出JSON.parse承诺?(或异步)_Javascript_Node.js_Asynchronous_Promise_Async Await - Fatal编程技术网

Javascript 如何做出JSON.parse承诺?(或异步)

Javascript 如何做出JSON.parse承诺?(或异步),javascript,node.js,asynchronous,promise,async-await,Javascript,Node.js,Asynchronous,Promise,Async Await,我试图创建一个返回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不是异步的。。。它在准备就绪时返回

我试图创建一个返回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承诺?还是异步?比如,如何在函数中“return”以等待JSON.parse的结果

如果你能提供简单的承诺代码。。。那真的很有帮助。事先非常感谢你。(我对bluebird js或async/await等开放)

添加代码(有关raw的更多信息) 在函数中,我读取json文件,然后对其进行json.parse,然后返回结果。(源是json文件的路径)

json文件如下所示(test.json)

JSON.parse()
确实是同步的,
console.log()
也是同步的,return语句也是同步的。Javscript中的所有内容都是同步的(和单线程的),除非您显式地使其异步

您得到的是一个未定义的
,因为您传入
raw
JSON.parse()
的内容不是有效的JSON,或者是空的,或者可能实际上不是字符串

下面是一个实时示例,显示它同步运行

功能测试(原始){
返回JSON.parse(原始);
}
log(“这首先发生”);
log(test(“{”valid1:true}”);
log(“这发生在第三次”);
log(test(“{”valid2:true}”);
log(“这是最后一次发生”)
JSON.parse()
确实是同步的,
console.log()
也是同步的,return语句也是同步的。Javscript中的所有内容都是同步的(和单线程的),除非您显式地使其异步

您得到的是一个未定义的
,因为您传入
raw
JSON.parse()
的内容不是有效的JSON,或者是空的,或者可能实际上不是字符串

下面是一个实时示例,显示它同步运行

功能测试(原始){
返回JSON.parse(原始);
}
log(“这首先发生”);
log(test(“{”valid1:true}”);
log(“这发生在第三次”);
log(test(“{”valid2:true}”);

log(“这是最后一次发生”)谢谢你的评论。但我不同意我的JSON文件无效或为空。例如,如果我在函数中尝试console.log(JSON.parse(raw))而不返回它,它会正确地表示JSON对象。@ryan return总是等待,除非您显式地使某个对象异步,否则它是同步的。@ryan不,您所假设的不可能是真的。@Soviut“不是有效的JSON,或者它是空的,或者它实际上不是字符串。”---在这种情况下,这将是一个例外,函数将不会返回。@ryan不客气,我希望您在副本中找到一个好的解决方案以实现所需的结果:)谢谢您的评论。但我不同意我的JSON文件无效或为空。例如,如果我在函数中尝试console.log(JSON.parse(raw))而不返回它,它会正确地表示JSON对象。@ryan return总是等待,除非您显式地使某个对象异步,否则它是同步的。@ryan不,您所假设的不可能是真的。@Soviut“不是有效的JSON,或者它是空的,或者它实际上不是字符串。”---在这种情况下,这将是一个例外,函数将不会返回。@ryan不客气,我希望您找到了一个好的解决方案,以在副本中实现所需的结果:)什么是
原始的
?提供一个完整的可运行示例来演示您的问题。您提供的代码将导致错误,而不是您声称的“未定义”输出,因为调用
测试(raw)中未定义
raw
@JaromandaX这可能会让人困惑:)我只是假设我提供了正确的原始输入hehe现在更改了查看代码的完整上下文如何解释函数返回undefined的原因,因为它实际上返回undefined!什么是
raw
?提供一个完整的可运行示例来演示您的问题。您提供的代码将导致错误,而不是您声称的“未定义”输出,因为调用
测试(raw)中未定义
raw
@JaromandaX这可能会让人困惑:)我只是假设我提供了正确的原始输入hehe现在更改了查看代码的完整上下文如何解释函数返回undefined的原因,因为它实际上返回undefined!
function test(source) {
fs.readFile(source, function (err, content) {
return JSON.parse(content));
});
}
console.log(test('test.json'));
// it says
// undefined
{
"a": "apple",
"b": "banana",
"c": "cat"
}