2017-02-16 83 views
0

我想使用回調函數的一個簡單的例子,但它有一些問題。如何解決'回調不是函數錯誤'?

(function ddd() { 
    const categories = []; 
    const url2 = 'http://www.example.com'; 

    const callback2 = function (res) { 
    console.log(res); 
    } 

    const callback = function (res,callback2) { 
    res.products.forEach((el) => { 
     categories.push({itemLabel: el.id, categoryLabel: 'gifts'}); 
    }); 
    callback2(categories); 
    }; 

    getData(url2, callback); 
})(); 

和控制檯說callback2 is not a function

我試過console.log(typeof(callback2))它說callback2是一個函數。

那麼,在這種情況下有什麼問題?當我只輸入console.log(categories)時,效果很好。

+0

哪裏是你的'getData'功能? –

+0

我沒有寫,因爲它運作良好。任何問題? – ahnpersie

回答

1

你必須做這樣的事情: 重要的是已經通過第二個回調的第一個函數作爲參數。

如果你不這樣做,你可以將函數存儲在一個全局變量中,但它不是真正的回調函數。

(function ddd() { 
 
    const categories = []; 
 
    const url2 = 'http://www.example.com'; 
 

 
    const callback2 = function (res) { 
 
    console.log(res); 
 
    } 
 

 
    const callback = function (res,callback2) { 
 
    res.products.forEach((el) => { 
 
     categories.push({itemLabel: el.id, categoryLabel: 'gifts'}); 
 
    }); 
 
    callback2(categories); 
 
    }; 
 
\t function getData(url, callback, callback2) { 
 
    \t callback({products: [{id: 10}]}, callback2); 
 
    }; 
 
    getData(url2, callback, callback2); 
 
})();

隨着全球Callback2:

(function ddd() { 
 
    const categories = []; 
 
    const url2 = 'http://www.example.com'; 
 

 
    const callback2 = function (res) { 
 
    console.log(res); 
 
    } 
 

 
    const callback = function (res) { 
 
    res.products.forEach((el) => { 
 
     categories.push({itemLabel: el.id, categoryLabel: 'gifts'}); 
 
    }); 
 
    callback2(categories); 
 
    }; 
 
\t function getData(url, callback) { 
 
    \t callback({products: [{id: 10}]}); 
 
    }; 
 
    getData(url2, callback); 
 
})();

+0

好吧,我明白了。隱藏結果和回調作爲參數,而不是全局函數很重要 – ahnpersie

0

正如我所看到的,您將callback2作爲參數傳遞給函數回調,然後不加載全局定義,他使用自己的回調作用域定義。

const callback = function (res) { 
    res.products.forEach((el) => { 
     categories.push({itemLabel: el.id, categoryLabel: 'gifts'}); 
    }); 
    callback2(categories); 
    }; 

刪除callback2,從PARAMS方法,將調用callback2定義以前,並在自己的範圍內不發現

+0

那我該如何正確使用? – ahnpersie

2

你必須做這樣的事情。

getData(url2, callback(result, callback2)); 
+0

謝謝。我忘了設置回調的參數 – ahnpersie

+0

這可能是危險的,因爲我認爲結果會從getData中產生。您應該將回調作爲參數,並像這樣調用回調函數:get data函數中的'callall(result,callback2)'。看我的樣品。 – patrick

相關問題