Javascript 使用参数异步调用方法
下面是一个例子: 为什么在使用参数调用函数fct1时,函数之间失去了异步性。 函数的执行顺序为:fct3、fct2、fct1,而不是fct1、fct2、fct3Javascript 使用参数异步调用方法,javascript,jquery,asynchronous,Javascript,Jquery,Asynchronous,下面是一个例子: 为什么在使用参数调用函数fct1时,函数之间失去了异步性。 函数的执行顺序为:fct3、fct2、fct1,而不是fct1、fct2、fct3 function fct1(param1) { var d = $.Deferred(); setTimeout(function() { console.log("fct1 : param1 =" + param1); d.resolve(); }, 3000); return d.prom
function fct1(param1) {
var d = $.Deferred();
setTimeout(function() {
console.log("fct1 : param1 =" + param1);
d.resolve();
}, 3000);
return d.promise();
};
function fct2() {
var d = $.Deferred();
setTimeout(function() {
console.log("fct2");
d.resolve();
}, 2000);
return d.promise();
};
function fct3() {
var d = $.Deferred();
setTimeout(function() {
console.log("fct3");
d.resolve();
}, 1000);
return d.promise();
};
var fct_array = [fct1(1), fct2, fct3];
var d = $.Deferred().resolve();
while (fct_array.length > 0) {
d = d.then(fct_array.shift());
}
将fctl()函数定义更改为:
function fct1(param){
var p =param;
var f = function(p){
var d = $.Deferred();
setTimeout(function() {
console.log("fct1 : p=" + p);
d.resolve();
}, 5000);
return d.promise();
}
return f.bind(this,p);
};
原因是,在初始化数组时,在执行函数fctl(1)
之前。因此,后来一个调用。然后它所做的
已经解决了
注意:无需更改while循环,因为您正在将对象d重新初始化为d=d.then(fct_array.shift())代码>
因此,
实现:将fctl()函数定义更改为:
function fct1(param){
var p =param;
var f = function(p){
var d = $.Deferred();
setTimeout(function() {
console.log("fct1 : p=" + p);
d.resolve();
}, 5000);
return d.promise();
}
return f.bind(this,p);
};
原因是,在初始化数组时,在执行函数fctl(1)
之前。因此,后来一个调用。然后它所做的
已经解决了
注意:无需更改while循环,因为您正在将对象d重新初始化为d=d.then(fct_array.shift())代码>
因此,
实现:它是“异步”而不是“同步”,这意味着第一个更快。。。fct3是1000 fct2是2000 fct3是3000,所以一切都很完美。可能是因为超时,我想用参数按顺序执行这些函数(fct1、fct2、fct3),我不知道为什么在为函数fc1添加参数时,函数之间会失去同步?它是“异步”而不是“同步”,这意味着第一个函数的速度更快。。。fct3是1000 fct2是2000 fct3是3000,所以一切都很完美。可能是因为超时,我想用参数按顺序执行这些函数(fct1,fct2,fct3),我不知道为什么当我为函数fc1添加参数时,我会在函数之间失去同步?我的问题是,例如,如何使用参数调用fct1而不会在函数之间失去同步?我测试你的反应我失去同步!!!虽然循环很好,但只需更改fctl(param)函数定义即可。我测试了您的解决方案,但很遗憾,它不起作用。我想,因为在我生成的函数(返回d.promise();)中,您有什么建议吗?我的问题是,例如,如何使用参数调用fct1而不丢失函数之间的同步?我测试你的反应我失去同步!!!虽然循环很好,但只需更改fctl(param)函数定义即可。我测试了您的解决方案,但很遗憾,它不起作用。我想是因为在我做的函数中(返回d.promise();)你有什么建议吗?