Blu*_*s23 2 javascript asynchronous synchronous
我正在创建的JavaScript API具有以下结构:
var engine = new Engine({
engineName: "TestEngine",
engineHost: "localhost"
});
// I don't want to proceed to the next line until Engine is fully loaded
// But the following part of the API is immediately called before the above is loaded
engine.startCar(
"car_name",
"car_id"
);
Run Code Online (Sandbox Code Playgroud)
"引擎"实例需要几秒钟才能加载(1-2秒).所以在那之前,
engine.startCar不应该被召唤.
如何对构造函数(new Engine())进行内部更改,使其在完全加载之前不返回实例?
这是JavaScript中的标准问题.通常,当您发出AJAX请求时会发生这种情况,但基于超时的延迟具有相同的基本问题.
jQuery和大多数具有此类问题的库通过使用初始方法来解决此问题,该方法返回"延迟"或"承诺"对象,可用于说"当X完成时,执行Y".
最好用例子来解释.如果在Engine构造函数中执行以下操作:
function Engine(option) {
var readyDeferred = new $.Deferred();
this.ready = readyDeferred;
window.setTimeout(1000, function() {
readyDeferred.resolve();
}
}
Run Code Online (Sandbox Code Playgroud)
您在构建引擎时可以执行以下操作:
var engine = new Engine({...});
engine.ready.done(function() {
// start your engines!
});
Run Code Online (Sandbox Code Playgroud)
当然,由于客户端计算机的时间不同,如果您可以使用除a之外的某些逻辑window.setTimeout来触发您的计算机,那就更好了readyDeferred.resolve();.例如,您可以在所有AJAX请求完成时触发它,这比任何特定的等待时间都更可预测.
| 归档时间: |
|
| 查看次数: |
1513 次 |
| 最近记录: |