2016-02-24 13 views
1

我有下面的简单的例子:的jquery如何传递参数回调函数成管

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')); 

Resulat: PARAM = OK 我失去功能之间的同步。 如何通过同步将参数传递给secondFunction到管道中?

回答

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') 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

到'return'从回调 – Bergi

+0

你是什么意思的承诺,不要忘了? –

+0

每一个异步函数都应该返回一个有用的承诺。在你的情况下,'then'回调缺少'return',所以你不能链接任何东西。 – Bergi