首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用参数调用方法异步

用参数调用方法异步
EN

Stack Overflow用户
提问于 2016-10-03 14:46:44
回答 1查看 82关注 0票数 0

下面的例子:为什么当我用参数调用函数fct1时,函数之间就失去了异步。函数的执行顺序是: fct3、fct2、fct1而不是fct1、fct2、fct3

代码语言:javascript
复制
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());
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-03 15:05:15

将fctl()函数定义更改为:

代码语言:javascript
复制
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)时在哪里执行函数fct_array。因此,后来有一个调用.then的方法已经解决了。

注意:在将对象d重新初始化为d=d.then(fct_array.shift());时,不需要更改Thus循环,

代码语言:javascript
复制
while (fct_array.length > 0) {
  d = d.then(fct_array.shift());
}

/* is equal to :
d=d.then(fct_array.shift()).then(fct_array.shift()).then(fct_array.shift());
*/

ImplementationJSBin

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39834373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档