Javascript-来自另一个函数的回调与调用函数

问题描述 投票:0回答:1

我有以下代码:

function download(url, callback) {
    setTimeout(() => {
      // script to download the picture here
      console.log(`Downloading ${url} ...`);

      callback();

   }, 3* 1000);
}


download(url);

为什么我需要一个回调函数。我不能只创建另一个函数并从下载函数中调用该函数吗?我看不出有人说异步编程需要回调。

javascript asynchronous callback
1个回答
1
投票

当值取决于承诺的响应时,回调是必要的。通常,当我们从其他来源(例如外部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);
© www.soinside.com 2019 - 2024. All rights reserved.