用 Async/Await 替换回调

用 async/await 替换回调,以提高 JavaScript 代码的可读性和错误处理能力。

在对 Cloud 控制台使用不同参数值时,或通过直接调用 Vertex AI API,您可以直接查询模型,并测试返回的结果。

提示自由格式

重构此 JavaScript 代码,使用 async/await 而不是回调来处理异步操作。目标是提高代码的可读性和错误处理能力。


function fetchData(url, callback) {
  http.get(url, function(response) {
    let data = '';
    response.on('data', (chunk) => {
      data += chunk;
    });
    response.on('end', () => {
      callback(null, data);
    });
  }).on('error', (err) => {
    callback(err);
  });
}

响应



async function fetchData(url) {
try {
const response = await new Promise((resolve, reject) => {
http.get(url, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
resolve(data);
});
}).on('error', reject);
});
return response;
} catch (error) {
throw error; // Re-throw the error to be handled by the caller
}
}

说明:

  1. async 函数:我们将 fetchData 函数定义为 async,从而允许在其中使用 await
  2. try...catch:我们将异步操作封装在 try...catch 块中,以处理潜在的错误。
  3. Promiseawait
  4. 我们创建一个 Promise,以便在完整收到响应后使用数据进行解析。
  5. 我们使用 await 来暂停函数的执行,直到 Promise 解析完毕。
  6. 错误处理
  7. 如果在 http.get 请求期间发生错误,则系统会调用 Promisereject 函数,从而执行 catch 块。
  8. 我们使用 throw error 重新抛出错误,以将其传播给调用方。
  9. 返回值:如果成功,fetchData 函数会返回提取的数据。

用法:


async function main() {
try {
const data = await fetchData('https://example.com/data');
console.log(data);
} catch (error) {
console.error('Error fetching data:', error);
}
}

main();

使用 async/await 的好处:

  • 提高了可读性:代码更简洁且更易于理解,因为异步流更明确。
  • 简化错误处理try...catch 块提供了一种明确的错误处理方法。
  • 无回调地狱:我们避免使用嵌套回调,使代码更易于维护。
  • 更好的控制流:代码执行更具可预测性,因为 await 会暂停函数,直到异步操作完成。
型号: gemini-1.5-flash-preview-0514
温度: 1
输出令牌数量上限: 8192
TopK: 40
TopP: 0.95