Javascript 如何将此JS代码转换为异步
给定一组相互依赖的选择框(选择a中的某个对象会用值填充B),我希望构建一个具有可能的值组合的对象Javascript 如何将此JS代码转换为异步,javascript,Javascript,给定一组相互依赖的选择框(选择a中的某个对象会用值填充B),我希望构建一个具有可能的值组合的对象 # out = { FieldNameA: [ { key: 'A', value: '', dep: { FieldNameB: [ { key: 'B', value: '', dep: [] } ] } } ] } 这是我正在使用的代码 function getFieldValues(selectors) { if (selectors.length == 0) { return
# 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));
函数GetFieldValue(选择器){
if(selectors.length==0){
返回[];
}
var fieldInfo=selectors.shift();
var field=document.querySelector(fieldInfo['selector']);
对于(var i=0;ii),为每个循环处理异步的简单方法是这样做
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();
}
函数myfunc(回调){
var dfd=jQuery.Deferred();
dfd.done(回调);
变量A=[var1,var2,var3]
var指数=0;
var next=函数(){
if(index如果要使其异步并添加延迟,可以使用javascript定时事件
setTimeout(function(){<Code you want to execute>}, <delay in milliseconds>);
setTimeout(function(){},);
检查:
希望这对你有所帮助,如果你仔细看的话,这里也有递归。我看不出使用递归有什么问题,但我没有指出的困难是如何从系统中收集结果。如果你使用JQuery,你可以使用JQuery延迟模式。这里的JQuery模式有点难理解,但对于这种类型的o非常有用f任务。无法使用jQuery,因为此代码可以通过bookmarklet在任何站点上执行。好的,您可以自己执行一个简单的jQuery延迟模式。所以您希望执行field.options.length
异步任务数?