什么是在Node.js中解析JSON最高效的方法?
使用process.nextTick的优点是什么,并且稍微延迟了以下代码段中的答案,并且不应该将整个try / catch封装到process.nextTick
中?
function parseJSON(json, done) {
try {
var result = JSON.parse(json);
process.nextTick(function() { done(null, result); });
} catch (err) {
process.nextTick(function() { done(err); });
}
}
答案 0 :(得分:2)
首先,因为JSON.parse
是同步的,所以使用回调没有意义。
这两个代码块基本上做同样的事情。最低效的是:
parseJSON(json, function(err, result) {
if (err) {
//ERROR
}
else {
//PARSED
}
});
VS
try {
var result = JSON.parse(json);
//PARSED
}
catch (e) {
//ERROR
}
现在回答你的实际问题:
使用process.nextTick ...
的优点是什么?
基本上没有"优势"除非你不使用process.nextTick,否则你的函数调用会变得更加同步。以这个例子为例:
console.log('1');
parseJSON(json, function(err, result) {
console.log('parsed');
});
console.log('2');
使用process.nextTick
时,您将获得此输出:
1
2
parsed
这是因为process.nextTick
将回调函数放在事件循环的末尾。意味着它首先让其他事情发生,然后执行回调。
如果您没有使用process.nextTick
,那么您将获得此输出:
1
parsed
2
这是因为parseJSON
在调用回调之前不会退出。
这两个版本都是有效的,但是通过回调,您通常希望它们真正异步。
至于try-catch,如果您正试图捕捉来自JSON.parse
的错误,它就会很好。由于您似乎想要处理错误(因为如果它引发异常,您将错误参数传递给回调),那么我说它是正确的。
答案 1 :(得分:0)
首先 。 process.nextick是async ...尝试catch可能无法正常工作.. JSON.parse是解析json字符串的首选方法
答案 2 :(得分:0)
- >什么是在Node.js中解析JSON最高效的方法?
JSON流可能是因为内存占用率低。
查看dominictarr或mafintosh所做的工作
https://github.com/mafintosh/json-format-stream