我有一个逻辑是:
的功能 _setDataChunk: function (action) {
var self = this;
/* some code */
var data = self._getDataChunk(action);
populateWidget(data);
}
GetDataChunk
有时会在内部进行AJAX调用,有时则不会。如何包装_getDtaChunk
函数以强制它一直同步操作?
答案 0 :(得分:1)
不要 - 让代码行事,因为它始终是异步的。
假设(例如)您不想获取的原因是因为您已经拥有数据:
function _getDataChunk(params) {
if (!cachedPromise) {
cachedPromise = $.ajax(...);
}
return cachedPromise;
}
然后使用Promise:
_setDataChunk: function (action) {
this._getDataChunk(action).then(populateWidget);
}
另请参阅http://www.slideshare.net/RayBellis/memoizing-withindexeddb的前五张幻灯片,其中显示了如何缓存异步计算结果
答案 1 :(得分:-1)
您可以强制_getDataChunk
中的ajax请求以同步模式运行。
您需要将功能更改为以下内容:
function _getDataChunk(action, forceSync) {
var forceSync = (typeof forceSync !== 'undefined') ? forceSync : false;
...
$.ajax({
...
async: !forceSync,
...
});
}
当您致电self._getDataChunk
时,请在通话中添加true
:
self._getDataChunk(action, true)