簡體   English   中英

Javascript - 回調與從另一個函數中調用函數

[英]Javascript - Callback vs Calling function from within another function

我有以下代碼:

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);

尼克帕森斯的評論很好地解釋了這一點


編輯:除了傳入回調函數,您還可以使用 async/await (未經測試)

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM