3 回答
TA贡献2065条经验 获得超13个赞
我不确定在哪里使用该函数,但是回调的要点是您将它们传递给异步运行的某个函数。它存储了您的回调,当该函数完成需要执行的操作后,它将使用必要的参数调用回调。从前到后的示例可能是最好的。
想象我们有一个框架,其中有一个运行了很长时间的操作,该操作从数据库中获取一些数据。
function getStuffFromDatabase() {
// this takes a long time
};
由于我们不希望它同步运行,因此我们将允许用户传递回调。
function getStuffFromDatabase(callback) {
// this takes a long time
};
我们将模拟长时间调用setTimeout;我们还将假装我们从数据库中获得了一些数据,但是我们只是硬编码一个字符串值。
function getStuffFromDatabase(callback) {
setTimeout(function() {
var results = "database data";
}, 5000);
};
最后,一旦有了数据,我们将调用框架函数用户给我们的回调。
function getStuffFromDatabase(callback) {
setTimeout(function() {
var results = "database data";
callback(results);
}, 5000);
};
作为框架的用户,您可以执行以下操作来使用该函数:
getStuffFromDatabase(function(data) {
console.log("The database data is " + data);
});
所以,你可以看到data(同response和postData在你的例子),从你通过回调函数来成 ; 当它知道数据应该是什么时,它将把数据提供给您。
您无法在回调中设置值并不能在回调之外使用它的原因是,回调本身直到稍后才发生。
// 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还没有发生!
添加回答
举报