Node.js - process.nextTick 和 parseJSON
Node.js - process.nextTick and parseJSON
在 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); });
}
}
首先
. process.nextick 是异步的... Try catch 可能无法按预期工作.. JSON.parse 是解析 json string
的首选方法
首先,因为 JSON.parse
是同步的,所以使用回调没有意义。
这两段代码基本上做同样的事情。最下面一个效率更高:
parseJSON(json, function(err, result) {
if (err) {
//ERROR
}
else {
//PARSED
}
});
对
try {
var result = JSON.parse(json);
//PARSED
}
catch (e) {
//ERROR
}
现在开始您的实际问题:
What's the advantage of using process.nextTick...
基本上没有 "advantage" 除非你不使用 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
的错误,那么它的位置很好。由于您似乎想要处理错误(因为如果它抛出异常,您将错误参数传递给回调)那么我会说它是正确的。
--> 在 Node.js 中解析 JSON 的最高效方法是什么?
JSON 可能是流,因为内存占用少。
查看 dominictarr 或 mafintosh 所做的工作
https://github.com/mafintosh/json-format-stream
在 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); });
}
}
首先 . process.nextick 是异步的... Try catch 可能无法按预期工作.. JSON.parse 是解析 json string
的首选方法首先,因为 JSON.parse
是同步的,所以使用回调没有意义。
这两段代码基本上做同样的事情。最下面一个效率更高:
parseJSON(json, function(err, result) {
if (err) {
//ERROR
}
else {
//PARSED
}
});
对
try {
var result = JSON.parse(json);
//PARSED
}
catch (e) {
//ERROR
}
现在开始您的实际问题:
What's the advantage of using process.nextTick...
基本上没有 "advantage" 除非你不使用 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
的错误,那么它的位置很好。由于您似乎想要处理错误(因为如果它抛出异常,您将错误参数传递给回调)那么我会说它是正确的。
--> 在 Node.js 中解析 JSON 的最高效方法是什么?
JSON 可能是流,因为内存占用少。
查看 dominictarr 或 mafintosh 所做的工作
https://github.com/mafintosh/json-format-stream