Javascript 关于节点';s代码样式
编辑 感谢所有答案,Javascript 关于节点';s代码样式,javascript,node.js,coding-style,deferred,Javascript,Node.js,Coding Style,Deferred,编辑 感谢所有答案, 最后我决定使用一些工具,比如, 我所需要的只是“流量控制”,不想要任何可能会降低性能的东西(我不知道它到底会产生多大的影响,或者这种影响可以忽略不计) 所以我只是创建了一个用于流量控制的小工具: line.js /** * Create the "next" function * * @param {Array} tasks * @param {Number} index * @param {Number} last */ var next = functi
最后我决定使用一些工具,比如,
我所需要的只是“流量控制”,不想要任何可能会降低性能的东西(我不知道它到底会产生多大的影响,或者这种影响可以忽略不计) 所以我只是创建了一个用于流量控制的小工具: line.js
/**
* Create the "next" function
*
* @param {Array} tasks
* @param {Number} index
* @param {Number} last
*/
var next = function(tasks, index, last) {
if (index == last) {
return tasks[index + 1];
}
else {
return function(data) {
var nextIndex = index + 1;
tasks[nextIndex](next(tasks, nextIndex, last), data);
};
}
};
/**
* Invoke functions in line.
*/
module.exports = function() {
var tasks = arguments,
last = tasks.length - 2;
tasks[0](next(tasks, 0, last));
};
用法:
var line = require("line.js");
line(function(next) {
someObj.find(function(err, docs) {
// codes
next(docs);
});
}, function(next, docs) {
// codes
});
希望这有帮助
编辑结束
众所周知,
节点的内置模块或第三方模块通常提供异步API,
并使用“回调”函数对结果进行处理 这很酷,但有时代码是这样的:
//some codes
}
}
}
}
像这样的代码很难读懂
我知道“延迟”库可以解决这样的问题,节点是否有良好的“延迟”模块?
如果我用“deferred”(延迟)编码节点,性能如何?有些库在某些场景中可能很有用,但总的来说,在所有情况下都使用它们之后,您不会感到兴奋 根据慢度问题。由于node.js是异步的,所以包装的函数并不是一个很大的性能消耗者 你可以在这里找图书馆 这个问题也很相似
作为最后的奖励,我建议你看看。它是一种语言,可以编译成javascript,并且具有更漂亮的语法,因为函数大括号被删除了有大量的“延迟库”。到处看看。选择其中一个,只是风格和简单性的问题:)如果你真的不喜欢这样,那么总是可以选择使用命名函数,这将减少缩进 而不是
setTimeout(function() {
fs.readFile('file', function (err, data) {
if (err) throw err;
console.log(data);
})
}, 200);
您可以这样做:
function dataHandler(err, data)
{
if (err) throw err;
console.log(data);
}
function getFile()
{
fs.readFile('file', dataHandler);
}
setTimeout(getFile, 200);
同样,没有嵌套。我通常喜欢使用async.js库,因为它提供了一些关于如何执行代码的不同选项。基于节点的代码有一个很大的问题;您经常增长“回调金字塔”。处理这个问题有几种方法: 代码样式: 利用这一烦恼将代码分解成小块。这意味着你可能会有一个微小的命名funcs扩散-这可能只是罚款,虽然!您可能还会发现更多的重用机会 流量控制库 现在有5937.2亿个流量控制库。以下是一些比较流行的:
- 超级基本的串行和并行流管理
- 是一个更重但功能更全的流量控制库
- 还有很多。搜索“流量”和“流量控制”(抱歉,似乎无法链接)
- 这是OkCupid团队的答案
- 他们还将TameJS作为叉子移植到CoffeeScript上
- 与TameJS非常相似
- 这是解决问题的一种较重的方法
- 它不是标准的JavaScript;如果您正在构建库/框架/等,则查找帮助将更加困难
- 根据库的不同,变量作用域可能以意外的方式运行
- 生成的代码可能很难调试并与原始源代码匹配
返回err if err
模式)
<>这应该开始为更清洁的流量控制库打下基础,并开始为更一致的回调金字塔处理铺平道路。现在有太多的选择,社区甚至还没有接近于就一些标准达成一致
参考文献:
- 关于这个问题