如何将此JS代码转换为异步代码

How to convert this JS code to be asynchronous

本文关键字:代码 转换 异步 JS      更新时间:2023-09-26

给定一组相互依赖的选择框(在a中选择某些东西以值填充B),我希望构建一个具有可能值组合的对象。

# out = { FieldNameA: [ { key: 'A', value: '', dep: { FieldNameB: [ { key: 'B', value: '', dep: [] } ] } } ] }

这是我正在使用的代码。

function getFieldValues(selectors) {
  if (selectors.length == 0) {
    return [];
  }
  var fieldInfo = selectors.shift();
  var field = document.querySelector(fieldInfo['selector']);
  for (var i=0; i<field.options.length; i++) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("change", false, true);
    field.selectedIndex = i;
    field.dispatchEvent(evt);
    var option = field.options[i]; 
    var fieldName = fieldInfo['name'];
    if (!result[fieldName]) {
      result[fieldName] = [];
    }
    var fieldData = { key: option.value, value: option.innerHTML };
    alert('starting child retrieval of data');
    var dependencies = getFieldValues(selectors.slice(0));
    if (dependencies) {
      fieldData['dependencies'] = dependencies;
    }
    result[fieldName].push(fieldData);
  }
  return result;
}
out = getFieldValues(selectors);
console.log(JSON.stringify(out));

我需要使其异步,以便在调度事件代码之后添加延迟,以便填充第二个选择中的值。但是,我尝试转换此代码失败了。

处理每个循环的async的简单方法是这样做

function myfunc(callback) {
  var dfd = jQuery.Deferred();
  dfd.done(callback);
  var A = [var1,var2,var3]
  var index = 0;
  var next = function() {
    if(index<A.length) {
      var item = A[index];
      index++;
      // Do what you want.
      setTimeout(next, 1); // or only next();
    } else {
      dfd.done();
    }
  };
  next();
}

如果你想让它异步并添加延迟,你可以使用javascript Timing Event

setTimeout(function(){<Code you want to execute>}, <delay in milliseconds>);

检查:http://www.w3schools.com/js/js_timing.asp

希望能有所帮助