📜  js 使用 promise 添加延迟 - Javascript (1)

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

使用 Promise 添加延迟

在 JavaScript 中,我们可以使用 Promise 来添加延迟,这给我们处理异步事件打开了新的门户。 Promise 是 JavaScript 中处理异步操作的一种机制,它可以让我们更容易地处理异步事件,同时也可以避免回调地狱。

创建 Promise

我们可以通过 new Promise() 来创建一个 Promise 对象。Promise 构造函数接收一个函数 executor,它有两个参数:resolverejectresolvereject 都是回调函数,在 Promise 执行完毕时被调用。

const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

// 使用方法:delay(1000).then(() => console.log('一秒钟后输出'))

在上面的例子中,delay() 函数返回一个 Promise 对象。在 Promise 执行期间,使用 setTimeout() 函数模拟了一个1秒的延迟。当延迟结束后,会调用 resolve() 函数告诉 Promise 继续执行。

在使用 Promise 中,我们可以以链式方式实现异步任务。

链式调用

Promise 链在 JavaScript 中非常常见,这是因为它们简单而优雅。如果要进行多个异步操作,我们可以以类似以下方式将其组合在一起:

const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

delay(1000)
  .then(() => console.log('一秒钟后输出'))
  .then(() => delay(2000))
  .then(() => console.log('再过两秒后输出'));

在上面的例子中,我们首先延迟1秒钟,并在延迟结束后打印一条消息。接着,我们再次延迟2秒钟,并在延迟结束后再一次打印类似的消息。

Promise 错误处理

在 Promise 中,我们可以使用 catch() 方法来捕获错误,代码片段如下所示:

Promise.resolve()
  .then(() => {
    throw new Error('test');
  })
  .catch((error) => {
    console.error('例外捕获: ', error);
  });

在上面的示例中,我们使用了 Promise.resolve() 来创建一个 Promise 对象。接着,我们使用 then() 方法进行异步操作,并在其回调函数中抛出了一个错误。因为没有对这个错误进行错误处理,这个错误将会被 Promise 捕获并终止 Promise 的执行。在这种情况下,我们可以使用 catch() 来捕获错误并进行处理。

总之,使用 Promise 执行异步任务时,我们通常会使用链式调用以及错误处理。同时,我们也需要注意回调函数的运行顺序,以确保 Promise 能够正确执行。