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

4

我正在使用underscore.js中的_.findWhere()函数来从一组包含特定属性的对象中查找一个对象。例如:

var rules = _.findWhere(rules, {id: ruleId});
if (!rules) {
    // do something 
}
else {
    // do something else
}

然后我开始担心JavaScript是异步的。 我知道 _.findWhere()在第二行执行时是否已经完成填充 rules 对象? 这是我需要考虑underscore.js中每个方法的事情吗?

我发现一个答案 _.each()是同步的,但我不确定如何确定这一点,也不确定该答案是否适用于 _.findWhere()或其他underscore.js函数。


我猜它是同步的,但我会检查源代码。它是否执行任何异步操作? - Sumner Evans
通常情况下,如果没有回调函数,它就是同步的... - mb21
3个回答

8
我相信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}):如果你在控制台中看到结果,则它是同步的(请注意,我不熟悉underscore,所以对我的测试示例不确定)。

1
其中一些函数是异步/包装器,例如_.throttle_.debounce_.defer等。但大部分都是同步的。 - megawac
谢谢更正。我猜把所有东西都视为同步仍然是安全的,因为当有人使用延迟(defer)等操作时,他很可能知道原因。 - floribon

2

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接