JavaScript中异步任务一般通过回调函数来实现,即当异步任务完成时,调用事先注册好的回调函数。例如:
function getData(url, callback) {
// 发送HTTP请求
fetch(url)
.then(response => response.json())
.then(data => callback(data))
.catch(error => console.error(error));
}
// 调用getData函数,并传入回调函数
getData('https://example.com/api/data', function(data) {
console.log(data);
});
在上面的例子中,我们通过fetch发送HTTP请求并异步获取数据,然后通过回调函数将数据传递给调用者。
Promise是ES6中新增的一种异步编程解决方案,它提供了一种更加优雅的处理异步任务的方式。通过Promise,我们可以将异步操作转化为类似于同步操作的方式,避免了回调函数嵌套的问题。
Promise有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。当异步任务完成时,Promise状态会从pending变为fulfilled或rejected,同时会调用相应的回调函数。
下面是一个使用Promise的例子:
function getData(url) {
// 返回一个Promise对象
return fetch(url)
.then(response => response.json())
.catch(error => console.error(error));
}
// 调用getData函数,并使用then方法监听Promise状态的变化
getData('https://example.com/api/data')
.then(data => console.log(data))
.catch(error => console.error(error));
在上面的例子中,我们通过fetch发送HTTP请求并异步获取数据,然后返回一个Promise对象。在调用者处,我们使用then方法监听Promise状态的变化,并在Promise状态变为fulfilled时调用相应的回调函数。如果Promise状态变为rejected,则调用catch方法捕获错误。