JavaScript之Promises语法

从 ECMAScript 6 开始,JavaScript 增加了对 Promise 对象的支持,它允许你对延时和异步操作流进行控制。

image-20220209173137286

Promise 对象有以下几种状态:

  • pending:初始的状态,即正在执行,不处于 fulfilled 或 rejected 状态。
  • fulfilled:成功的完成了操作。
  • rejected:失败,没有完成操作。
  • settled:Promise 处于 fulfilled 或 rejected 二者中的任意一个状态, 不会是 pending。
img

走进Promise

Promise 是一个对象,它代表了一个异步操作的最终完成或者失败。因为大多数人仅仅是使用已创建的 Promise 实例对象,所以本教程将首先说明怎样使用 Promise,再说明如何创建 Promise。

本质上 Promise 是一个函数返回的对象,我们可以在它上面绑定回调函数,这样我们就不需要在一开始把回调函数作为参数传入这个函数了。

假设现在有一个名为 createAudioFileAsync() 的函数,它接收一些配置和两个回调函数,然后异步地生成音频文件。一个回调函数在文件成功创建时被调用,另一个则在出现异常时被调用。

以下为使用 createAudioFileAsync() 的示例:

// 成功的回调函数
function successCallback(result) {
  console.log("音频文件创建成功: " + result);
}
​
// 失败的回调函数
function failureCallback(error) {
  console.log("音频文件创建失败: " + error);
}
​
createAudioFileAsync(audioSettings, successCallback, failureCallback)

更现代的函数会返回一个 Promise 对象,使得你可以将你的回调函数绑定在该 Promise 上。

如果函数 createAudioFileAsync() 被重写为返回 Promise 的形式,那么我们可以像下面这样简单地调用它:

const promise = createAudioFileAsync(audioSettings);
promise.then(successCallback, failureCallback);

或者简写为:

createAudioFileAsync(audioSettings).then(successCallback, failureCallback);

我们把这个称为 异步函数调用,这种形式有若干优点,下面我们将会逐一讨论。

使用 Promise参考教程:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Using_promises

Promise参考教程:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise

© 版权声明
THE END
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容