underscore.js 函数,例如 _.findWhere(),return 的结果是同步的吗?
Do underscore.js functions, such as _.findWhere(), return results synchronously?
我在 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()
或其他 underscore.js函数。
我相信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})
:如果您在控制台中看到一个结果,那么它是同步的(请注意,我不熟悉下划线,所以不确定我的测试示例)
绝大多数 JavaScript 是同步的,除非另有说明。
异步函数将具有回调或 return 承诺。但是同样,各种库中具有回调的大多数函数/方法都不是异步的。
它们是同步的。
自己看看:_.findWhere, _.matches, _.find, _.findIndex, createIndexFinder。这些函数中没有 setTimeout
的实例。
我在 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()
或其他 underscore.js函数。
我相信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})
:如果您在控制台中看到一个结果,那么它是同步的(请注意,我不熟悉下划线,所以不确定我的测试示例)
绝大多数 JavaScript 是同步的,除非另有说明。
异步函数将具有回调或 return 承诺。但是同样,各种库中具有回调的大多数函数/方法都不是异步的。
它们是同步的。
自己看看:_.findWhere, _.matches, _.find, _.findIndex, createIndexFinder。这些函数中没有 setTimeout
的实例。