在函数中获取 worker.onmessage 的 return 值?

Get return value of worker.onmessage inside a function?

我创建了一个缓存(Memoized)函数,它将另一个函数作为参数

以下是正在缓存的函数。该功能使用一个工人。这里的问题是,如果
var hello = GetSubRegion(1233) ,那么 hello 是未定义的,因为 onmessage 里面的函数 returns 是一个值,而不是父 GetSubRegion 函数。

function GetSubRegion(selectedMainRegion){
if (typeof(subRegWorker) != "undefined") {
subRegWorker.terminate();
}
subRegWorker = new Worker("subRegWorker.js");
subRegWorker.onmessage = function(e) {
var workData = e.data;
jQuery("#_sub_region").html(workData);
subRegWorker.terminate();
return workData;
}
var result = subRegWorker.postMessage(selectedMainRegion);
return result;
}

下面是缓存函数。由于上述问题,
let result = fun(n) 没有返回值,因此没有缓存任何内容。

function memoizer(fun){
    let cache = {}
    return function (n){
        if (cache[n] != undefined ) {
          return cache[n]
        } else {
        console.log(n);
          let result = fun(n)
          cache[n] = result
          return result
        }
    }
}

如何解决这个问题?

以下是我调用缓存函数的方式。

jQuery("#_main_region").change(function() {
var getCacheSub = memoizer(GetSubRegion);
var inputMainRegion = jQuery('#_main_region').find(":selected").val();
getCacheSub(inputMainRegion);
});

缓存问题解决如下,修改代码见市场评论-

    var cache = {};
    function memoizer(fun){
        
        return function (n){
            if (cache[n] != undefined ) {
            jQuery("#_sub_region").html(cache[n]);  // This was changed
            return cache[n]
            } else {
            console.log(n);
              cache[n] = result
              return result
            }
        }
    }

function GetSubRegion(selectedMainRegion){
if (typeof(subRegWorker) != "undefined") {
subRegWorker.terminate();
}
subRegWorker = new Worker("subRegWorker.js");
subRegWorker.onmessage = function(e) {
var workData = e.data;
cache[n] = workData // This was changed
jQuery("#_sub_region").html(workData);
subRegWorker.terminate();
return workData;
}
subRegWorker.postMessage(selectedMainRegion);
}