我有以下代码:
function download(url, callback) {
setTimeout(() => {
// script to download the picture here
console.log(`Downloading ${url} ...`);
callback();
}, 3* 1000);
}
download(url);
为什么我需要一个回调函数。我不能只创建另一个函数并从下载函数中调用该函数吗?我看不出有人说异步编程需要回调。
当值取决于承诺的响应时,回调是必要的。通常,当我们从其他来源(例如外部API)请求数据时,我们并不总是知道何时将数据送回。
我认为您的示例所暗示的是这样的:
function download(url, callback) {
console.log(`Downloading ${url} ...`);
fetch(url)
.then((response) => {
callback(null, response)
})
.catch((error) => {
callback(err, null)
});
}
download("http://example.com/movies.json", function(err, response){
// Do something with the response data
});
我不能只创建另一个函数并从下载函数中调用该函数吗?
将其他函数作为回调传递会更有意义,如下所示:
function handleMovieData(err, response) {
// Do something with the response data
}
download("http://example.com/movies.json", handleMovieData);
[尼克·帕森斯的评论很好地说明了这一点
EDIT:除了传递回调函数外,还可以使用async / await (unested)
async function download(url) {
console.log(`Downloading ${url} ...`);
return new Promise(function(resolve, reject) {
fetch(url)
.then((response) => {
resolve(response)
})
.catch((error) => {
reject(err)
});
})
}
const movieData = await download("http://example.com/movies.json");
handleMovieData(movieData);