3 回答

TA貢獻2065條經(jīng)驗 獲得超14個贊
我不確定在哪里使用該函數(shù),但是回調(diào)的要點是您將它們傳遞給異步運行的某個函數(shù)。它存儲了您的回調(diào),當該函數(shù)完成需要執(zhí)行的操作后,它將使用必要的參數(shù)調(diào)用回調(diào)。從前到后的示例可能是最好的。
想象我們有一個框架,其中有一個運行了很長時間的操作,該操作從數(shù)據(jù)庫中獲取一些數(shù)據(jù)。
function getStuffFromDatabase() {
// this takes a long time
};
由于我們不希望它同步運行,因此我們將允許用戶傳遞回調(diào)。
function getStuffFromDatabase(callback) {
// this takes a long time
};
我們將模擬長時間調(diào)用setTimeout;我們還將假裝我們從數(shù)據(jù)庫中獲得了一些數(shù)據(jù),但是我們只是硬編碼一個字符串值。
function getStuffFromDatabase(callback) {
setTimeout(function() {
var results = "database data";
}, 5000);
};
最后,一旦有了數(shù)據(jù),我們將調(diào)用框架函數(shù)用戶給我們的回調(diào)。
function getStuffFromDatabase(callback) {
setTimeout(function() {
var results = "database data";
callback(results);
}, 5000);
};
作為框架的用戶,您可以執(zhí)行以下操作來使用該函數(shù):
getStuffFromDatabase(function(data) {
console.log("The database data is " + data);
});
所以,你可以看到data(同response和postData在你的例子),從你通過回調(diào)函數(shù)來成 ; 當它知道數(shù)據(jù)應該是什么時,它將把數(shù)據(jù)提供給您。
您無法在回調(diào)中設置值并不能在回調(diào)之外使用它的原因是,回調(diào)本身直到稍后才發(fā)生。
// executed immediately executed sometime in the future
// | | by getStuffFromDatabase
// v v
getStuffFromDatabase(function(data) {
var results = data; // <- this isn't available until sometime in the future!
});
console.log(results); // <- executed immediately
當console.log運行時,的分配var results還沒有發(fā)生!
添加回答
舉報