簡體   English   中英

JavaScript 多重回調函數

[英]JavaScript Multiple Callback Function

一段時間以來,我一直試圖找出 Javascript 中的回調函數功能,但沒有成功。 我可能把代碼搞砸了,但是我沒有收到任何 Javascript 錯誤,所以我認為語法有點正確。

基本上,我正在尋找 getDistanceWithLatLong() 函數在 updateDB() 開始之前結束,然后確保在 printList() 函數開始之前結束。

我讓它在函數上使用硬編碼的“setTimeout”調用,但我過度補償並迫使用戶等待更長時間而無需回調的東西是否可以工作。

有什么建議? 下面是代碼:

function runSearchInOrder(callback) {
    getDistanceWithLatLong(function() {
        updateDB(function() {
            printList(callback);
        });
    });
}

為此,您需要將下一個回調傳遞給每個函數。

function printList(callback) {
  // do your printList work
  console.log('printList is done');
  callback();
}

function updateDB(callback) {
  // do your updateDB work
  console.log('updateDB is done');
  callback()
}

function getDistanceWithLatLong(callback) {
  // do your getDistanceWithLatLong work
  console.log('getDistanceWithLatLong is done');
  callback();
}

function runSearchInOrder(callback) {
    getDistanceWithLatLong(function() {
        updateDB(function() {
            printList(callback);
        });
    });
}

runSearchInOrder(function(){console.log('finished')});

此代碼輸出:

getDistanceWithLatLong is done
updateDB is done
printList is done
finished 

這行不通:

function callback(f1, f2) {
    f1();
    f2();
}

至於傳遞參數,要有創意。

 function1 = (callback1, callback2, callback3) => { setTimeout(() => { console.log("function 1 timed out!"); callback1(callback2, callback3); }, 1500); } function2 = (callback1, callback2) => { setTimeout(() => { console.log("function 2 timed out!"); callback1(callback2); }, 1500); } function3 = (callback1) => { setTimeout(() => { console.log("function 3 timed out!") callback1() }, 1500); } function4 = () => { setTimeout(() => { console.log("function 4 timed out!") }, 1500); } function1(function2, function3, function4);

只需傳遞第一個函數的回調並執行每個回調,傳遞其余的。

輸出

 function 1 timed out! function 2 timed out! function 3 timed out! function 4 timed out!

在 JavaScript 中,一切都是對象,包括函數。 這就是為什么您能夠將回調作為參數傳遞的原因 - 您正在傳遞一個函數,就好像它是任何其他對象一樣。

在每個函數聲明中,您都需要運行回調。

function runSearchInOrder(callback) {

    ...

    callback();
}

function getDistanceWithLatLong(callback) {

    ...

    callback();
}

function updateDB(callback) {

    ...

    callback();
}

那么你上面發布的代碼應該可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM