我在underscore.js中使用_.findWhere()
来查找包含此类对象集合中特定属性的对象。例如:
var rules = _.findWhere(rules, {id: ruleId});
if (!rules) {
// do something
}
else {
// do something else
}
然后我开始担心JavaScript是异步的。我是否知道_.findWhere()
将在第二行执行时完成填充rules
对象?对于underscore.js中的每个方法,我需要考虑这个问题吗?
我发现an answer表示_.each()
是同步的,但我不确定这是如何确定的,我也不确定该答案是否适用于_.findWhere()
或其他下划线.js函数。
答案 0 :(得分:7)
我相信underscore.js的每一个函数都是同步的,所以你不必担心它:在它之后写的每一行都将在之后执行。
无论如何,如果它不同步(即异步),则需要回调,例如
// DISCLAIMER: this is a fictionnal code, it is in fact synchronous
_.findWhere(rules, {id: ruleId}, function done() {
// code to be executed once finished
});
如果您仍然有疑问,可以在浏览器的控制台_.findWhere([{a:true},{a:false}], {a:true})
中进行测试:如果您在控制台中看到结果,那么它是同步的(请注意,我不熟悉下划线,所以不确定关于我的测试例子)
答案 1 :(得分:2)
他们是同步的。
亲眼看看:_.findWhere,_.matches,_.find,_.findIndex,createIndexFinder。这些功能中没有setTimeout
的实例。
答案 2 :(得分:0)
除非另有说明,否则绝大多数JavaScript都是同步的。
异步函数将具有回调或返回promise。但是,具有回调的各种库中的大多数函数/方法也不是异步的。