dropcore.js函数,如_.findWhere(),是否同步返回结果?

时间:2015-01-29 23:53:46

标签: javascript underscore.js

我在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函数。

3 个答案:

答案 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_.findIndexcreateIndexFinder。这些功能中没有setTimeout的实例。

答案 2 :(得分:0)

除非另有说明,否则绝大多数JavaScript都是同步的。

异步函数将具有回调或返回promise。但是,具有回调的各种库中的大多数函数/方法也不是异步的。