iT邦幫忙

0

javascript程式碼相關問題

請問各位先進,看到一段javascript程式碼,但不太懂裡面的邏輯,程式碼如下,有刪除大部份程式碼,只留下看不懂的部份~
1.請問$httpApi這是jquery的方法嗎?用這個關鍵字去google找都找不到相關資訊,還是這是自訂意的模組套件?
2.程式碼執行到最後又呼叫func();意思是整個Save()又要整個重跑一次?這樣下去不就沒完沒了跑不完?直到error才會結束。我的理解對嗎?


let event = {
    Save: function(func) {
        //己刪除大部份前處理程式碼..........
        
        $httpApi.post({
            apiMethod: 'Save',
            data: {
                data: data,
            }
        }, function(res) {
            if (!res.isSuccess) {
                alert(res.errmsg);
                return;
            }
            //己刪除大部份前處理程式碼..........
            func();
        });
    }
}
events.Save(function() {
    //doSomething.....                             
    events.loadAllData();
    Init();
});

2 個回答

0
hugh2113
iT邦見習生 ‧ 2021-02-15 14:51:18
最佳解答
  1. $httpApi 應該是其他套件 比較有可能是 http-api
  2. 你注意看你放進Save function 中的參數是一個 function 所以最後結束會需要被執行不然就是只呼叫 Save function 不會處理你丟在最後你寫
    events.Save(function() { //doSomething..... events.loadAllData(); Init(); });裡面的function
leo226 iT邦新手 4 級 ‧ 2021-02-15 22:55:29 檢舉

了解,謝謝~

1
nero
iT邦新手 5 級 ‧ 2021-02-14 21:30:11

第1點:不知道妳從哪裏看到的程式碼,但$httpApi方法肯定是那段程式碼所屬的應用自己封裝發送異步請求的庫,妳明白這壹點即可。

第2點:“程式碼執行到最後又呼叫func()”,這個func是event.Save的形參,我們看實際呼叫的地方:

events.Save(function() {
    //doSomething.....                             
    events.loadAllData();
    Init();
});

在這種場景下,func就是這壹塊程式碼

function() {
    //doSomething.....                             
    events.loadAllData();
    Init();
}

並未呼叫Save()方法,所以不會壹直跑下去

leo226 iT邦新手 4 級 ‧ 2021-02-15 08:37:58 檢舉

nero
關於第二點,經過前輩的指點,我想再更確定的一點是,如果沒有呼叫func()的話,那裡面的callback function就不會執行嗎?(這應該叫callback function沒錯吧?)
這一段程式碼應該是Save執行完後會自動執行的,為什麼還要手動呼叫,還是我誤會了它。。。><

nero iT邦新手 5 級 ‧ 2021-02-16 14:59:09 檢舉

我理解的你説的callback function,是指是的下面這部分程式碼:

function() {
    //doSomething.....                             
    events.loadAllData();
    Init();
}

這一部分程式碼是一個匿名函數,在JavaScript中,函數的引用可以作爲其他函數的參數,func就是這個匿名函數的引用,所以如果不呼叫func()的話,callback function是不會執行的

leo226 iT邦新手 4 級 ‧ 2021-02-16 19:01:09 檢舉

了解,那是我誤會它的執行流程了,感謝指教~

我要發表回答

立即登入回答