首页  >  文章  >  web前端  >  如何正确地将 setTimeout() 合并到 Promise 链中?

如何正确地将 setTimeout() 合并到 Promise 链中?

Susan Sarandon
Susan Sarandon原创
2024-10-31 16:02:02535浏览

How to Properly Incorporate setTimeout() into Promise Chains?

在 Promise 链中使用 setTimeout()

使用 Promise 时,了解如何处理 Promise 链中的异步操作至关重要。在给定的代码片段中,目的是延迟承诺链中后续请求的执行。但是,直接在 .then() 处理程序中使用 setTimeout() 可能会导致问题。

为什么 setTimeout() 失败

在您的代码中,setTimeout() 是在第二个请求的 .then() 处理程序中使用。但是,这种方法会破坏 Promise 链,因为 .then() 处理程序的返回值不是 Promise。 setTimeout() 回调包含要链接的 Promise,在其自身上下文之外无法访问。

使用延迟函数的解决方案

维护 Promise 链,您可以创建一个单独的延迟函数来返回一个承诺:

<code class="javascript">function delay(t, val) {
    return new Promise(resolve => setTimeout(resolve, t, val));
}</code>

然后,在您的承诺中使用延迟函数chain:

<code class="javascript">return delay(1000).then(function() {
    return getLinks(globalObj["two"] + ".txt");
});</code>

这会从 .then() 处理程序返回一个 Promise,这确保后续请求的执行被延迟。

替代使用 Promise.prototype。延迟

另一个选择是延迟扩展 Promise 对象方法:

<code class="javascript">Promise.prototype.delay = function(t) {
    return this.then(function(val) {
        return delay(t, val);
    });
}</code>

使用此方法,您可以直接在您的 Promise 上调用 .delay():

<code class="javascript">Promise.resolve("hello").delay(500).then(function(val) {
    console.log(val);
});</code>

这两种方法都确保 Promise 链得到正确维护以及后续请求在指定的延迟后执行。

以上是如何正确地将 setTimeout() 合并到 Promise 链中?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn