【问题标题】:jquery how to pass parameter to callback function into pipejquery如何将参数传递给回调函数到管道中
【发布时间】:2016-02-24 13:51:22
【问题描述】:

下面是一个简单的例子:

function firstFunction(){
  var d = jQuery.Deferred();
  // some very time consuming asynchronous code...
  setTimeout(function() {
    console.log('1');
    d.resolve();
  }, 1000);
  return d.promise();
}
function secondFunction(param){
  console.log('parm = '+param);
  var d = $.Deferred();
  setTimeout(function() {
    console.log('2');
    d.resolve();
  }, 10);
  return d.promise();
}

firstFunction().pipe(secondFunction('OK'));

结果: 参数 = 好的 2 1 我失去了功能之间的同步。 如何通过同步将参数传递给 secondFunction 到管道中?

【问题讨论】:

    标签: javascript jquery promise jquery-deferred


    【解决方案1】:

    好吧,你需要做些小改动:

    您的代码将立即执行secondFunction,并将执行它的返回值作为参数传递给firstFunction,这不太可能是您想要的。

    阅读完整答案:Javascript callback function with parameters

    console.log = function(message) {
      $('body').append('<div>' + message + '</div>');
    }
    
    function firstFunction(){
      var d = jQuery.Deferred();
      // some very time consuming asynchronous code...
      setTimeout(function() {
        console.log('1');
        d.resolve();
      }, 1000);
      return d.promise();
    }
    function secondFunction(param){
      console.log('parm = '+param);
      var d = $.Deferred();
      setTimeout(function() {
        console.log('2');
        d.resolve();
      }, 10);
      return d.promise();
    }
    
    firstFunction().then(function() {
      secondFunction('OK')
    });
    &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

    【讨论】:

    • 别忘了return回调中的承诺
    • 每个异步函数都应该返回一个有用的承诺。在您的情况下,then 回调缺少 return,因此您不能将任何东西链接到它。
    • 哦等等,你还在用pipe?!立即将其替换为 then,它已被弃用多年!
    • @Bergi 我只是跟着问题 :) 但我更新了我的答案.. 谢谢.. 关于你的评论,我不明白。你的意思是我应该在secondFunction('OK') 后面加上return ?? 吗?如果是,我需要返回什么?
    • @collo21 我的荣幸 ;) 祝你好运。
    猜你喜欢
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2011-02-02
    • 1970-01-01
    相关资源
    最近更新 更多