2016-02-24 36 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

相關問題