簡體   English   中英

如何將一些代碼傳遞給接受回調的 function?

[英]how to pass some code to a function that accepts callback?

我有一個來自營銷提供商的 javascript function 需要在從購物車中刪除產品時執行.....

當我從購物車中刪除產品時,必須執行此代碼:

_ra.removeFromCartInfo = {
    "product_id": 133,
    "quantity": 1,
    "variation": false
};

if (_ra.ready !== undefined) {
    _ra.removeFromCart(
        _ra.removeFromCartInfo.product_id,
        _ra.removeFromCartInfo.quantity,
        _ra.removeFromCartInfo.variation,
        function() {
           // code that need to execute after the removeFromCart finished
        }
    );
}

removeFromCart 接受一個回調 function,我需要在父 function removeFromCart 執行后添加一些代碼來執行。

我創建了自己的 function (_rb_remove_from_cart) - 以避免代碼重復 - 我將上面的代碼放入其中:

function _rb_remove_from_cart(product_id, qty, variation) {
    var _ra = _ra || {};

    _ra.removeFromCartInfo = {
        "product_id": product_id,
        "quantity": qty,
        "variation": variation
    };

    if (_ra.ready !== undefined) {
        _ra.removeFromCart(
            _ra.removeFromCartInfo.product_id,
            _ra.removeFromCartInfo.quantity,
            _ra.removeFromCartInfo.variation,
            function() {
               // code that need to execute after the removeFromCart finished
            }
        );
    }
}

當我執行 function - 我需要的地方 -

// the function that removes the element from cart href="javascript:remove_cart_element( ... )
function remove_cart_element(product_id, qty, variation, url) {
        ​
   ​// code that need to execute in callback function

   ​...
  ​
   ​_rb_remove_from_cart(product_id, qty, variation);
}

我不知道如何將代碼傳遞給 function _rb_remove_from_cart 以在回調中執行。

我應該用代碼創建另一個 function .... 然后作為參數傳遞給 function _rb_remove_from_cart?

您不能將可執行代碼直接傳遞給 function,但是,您可以將其傳遞給另一個 function。

function sayHello(param1, param2) {
    alert(`Hello! Param1=${param1}, param2=${param2}`);
}

function _rb_remove_from_cart(product_id, qty, variation, callback) { // callback is sayHello
    
        ...
        _ra.removeFromCart(
            _ra.removeFromCartInfo.product_id,
            _ra.removeFromCartInfo.quantity,
            _ra.removeFromCartInfo.variation,
            callback
        );
}

function remove_cart_element(product_id, qty, variation, url) {     ​
   ​_rb_remove_from_cart(product_id, qty, variation, sayHello.bind(this, param1, param2));
}

暫無
暫無

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

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