rya*_*yan 3 javascript asynchronous node.js 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"...
Run Code Online (Sandbox Code Playgroud)
我想我知道为什么(如果我错了,请纠正我)。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
Run Code Online (Sandbox Code Playgroud)
json 文件看起来像这样 (test.json)
{
"a": "apple",
"b": "banana",
"c": "cat"
}
Run Code Online (Sandbox Code Playgroud)
JSON.parse()
确实是同步的, 也是同步的console.log()
, return 语句也是同步的。Javscript 中的所有内容都是同步的(并且是单线程的),除非您明确将其设为异步。
您收到一个错误是因为您传入undefined
的内容不是有效的 JSON,或者它是空的,或者实际上不是字符串。raw
JSON.parse()
这是一个展示它同步运行的实例。
function test(raw) {
return JSON.parse(raw);
}
console.log('this happens first');
console.log(test('{"valid1": true}'));
console.log('this happens 3rd');
console.log(test('{"valid2": true}'));
console.log('this happens last');
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21897 次 |
最近记录: |