【发布时间】:2014-12-25 18:25:24
【问题描述】:
我正在寻找关于以下 JavaScript 代码是否包含竞争条件的可靠答案。
问题归结为:如果我开始监听异步任务的完成(例如 AJAX 调用)在我启动任务之后立即,该任务能否在我之前完成?已经开始听了吗?
我找到了几个similar questions,但没有一个答案似乎完全具体(“那里可能是个问题......不太可能 ...”)。这是我所指的那种情况的粗略示例:
// Publish an event synchronously
function emit(key){}
// Subscribe to an event
function on(key, cb){}
// Request the given url;
// emit 'loaded' when done
function get(url) {
http.get(url, function() {
emit('loaded');
});
}
get(url);
on('loaded', function() {
// Assuming this subscription happens
// within the same execution flow as
// the call to `get()`, could 'loaded'
// ever fire beforehand?
});
如果答案得到实际语言规范(或其他权威来源)的支持,那就更好了!
【问题讨论】: