【问题标题】:Get return value of worker.onmessage inside a function?在函数内获取worker.onmessage的返回值?
【发布时间】:2020-12-16 20:36:40
【问题描述】:

我创建了一个缓存(记忆)函数,它以另一个函数作为参数

以下是正在缓存的函数。该功能使用一个工人。这里的问题是,如果
var hello = GetSubRegion(1233) ,那么 hello 是未定义的,因为 onmessage 中的函数返回一个值,而不是父 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);
});

【问题讨论】:

    标签: javascript jquery caching return memoization


    【解决方案1】:

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

        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);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-09-22
      • 2016-01-03
      • 1970-01-01
      • 2019-01-20
      • 2018-08-25
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多