📜  tesseract 不推荐使用不带回调的异步函数. (1)

📅  最后修改于: 2023-12-03 14:47:56.882000             🧑  作者: Mango

Tesseract: 不推荐使用不带回调的异步函数

Tesseract是一个流行的JavaScript库,可以使编写异步代码变得更加容易。然而,不推荐使用不带回调的异步函数。在本文中,我们将探讨这个问题,并提供一些有关如何编写更好的异步代码的提示。

什么是回调?

回调是在异步操作完成后执行的函数。它可以在异步操作完成后通知代码进行更进一步的操作。

以下是一个使用回调的示例:

function fetchData(callback) {
  // 异步操作
  setTimeout(() => {
    const data = { name: 'tesseract' };
    callback(data);
  }, 1000);
}

fetchData((data) => {
  console.log(data.name);
});

在以上示例中,fetchData中的异步操作完成后,将调用回调函数并传递数据,以便在fetchData之外的代码中使用。

不带回调的异步函数为什么不推荐使用?

使用不带回调的异步函数,代码将无法感知异步操作何时完成,必须等待并始终期望异步操作已完成。此时代码会长时间处于等待状态,从而导致性能下降。例如:

function fetchData() {
  // 异步操作 
  const data = fetch('https://jsonplaceholder.typicode.com/todos/1')
    .then(response => response.json())
    .then(data => data);
  
  // 在完成异步操作前,下面的代码将会立即执行
  return data;
}

const result = fetchData();

console.log(result);

在上面的fetchData函数中,代码返回一个Promise对象。当fetchData函数被调用后,代码将立即执行return data,因为异步操作还未完成,代码将返回undefined 。因此,当console.log(result)被调用时,返回undefined,而不是预期的数据结果。这种情况可能会被误认为是代码内部的错误,但实际上是因为未使用回调函数的异步函数导致的。

如何编写更好的异步代码
  • 优先使用带有回调的异步函数,以便在异步操作完成后通知代码操作已完成。
  • 当必须使用不带回调的异步函数时,使用await关键字等待异步操作完成,以便在异步操作完成后控制执行流程。

例如:

async function fetchData() {
  // 异步操作
  const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
  const data = await response.json();
  
  return data;
}

const result = fetchData();

console.log(result);

在声明fetchData函数时,使用async关键字将函数声明为异步函数。使用await关键字等待异步操作完成后,代码将继续执行并返回数据结果。

总结

Tesseract是一款出色的JavaScript库,使编写异步代码变得容易。但是,不推荐使用不带回调的异步函数,因为代码无法感知异步操作何时完成,导致代码长时间处于等待状态,性能下降。因此,在编写异步代码时,请优先使用带有回调的异步函数来控制执行流程。如果必须使用不带回调的异步函数,使用await等待异步操作完成后再控制执行流程。