使用 setTimeout(async function(){}) 和 setTimeout(function(){}) 有什么区别?

发布于 2025-01-20 05:22:38 字数 539 浏览 0 评论 0 原文

当请求发送到我的服务器端点时,我运行一个非障碍物 makeorder 。

如果使用 settimeout ,我想第二次运行该函数,但是我不确定是否应该在 async > settimeout 确保它不会阻止事件循环。

目前我在做什么:

if (await makeOrder(order)) {
    // order was successful
} else {
    // try again in 5 minutes
    setTimeout(async function() {
        makeOrder(order);
    }, 300000);
}

这是正确的吗? ( makeorder 是否成功地返回对还是错误)

我想知道,如果我使用async,如果更多的请求到达我的端点,是否有更多请求到达我的端点,是否有区别功能与仅函数?

When a request is sent to my server endpoint, I run a function makeOrder that is non-blocking.

I wanted to run the function a second time if it failed the first time by using setTimeout, but I'm not sure if I should use async or not within the setTimeout to make sure it doesn't block the event loop.

What I'm doing at the moment is this:

if (await makeOrder(order)) {
    // order was successful
} else {
    // try again in 5 minutes
    setTimeout(async function() {
        makeOrder(order);
    }, 300000);
}

Is this correct? (makeOrder returns true or false base on if it was successful or not)

I'm wondering if there is a difference in making the code blocking or non-blocking if more requests reach my endpoint if I use async function vs just function?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

走野 2025-01-27 05:22:38

async 关键字:

  • 迫使返回承诺的功能(由于 settimeout 忽略返回值是无关紧要的)。
  • 允许您在功能中使用等待关键字,

它不会停止阻止代码阻止。

使用 async 您需要在功能中管理承诺。在这种情况下,没有其他用途。

您呼叫的唯一功能会返回布尔值,而不是承诺,因此您没有任何承诺要管理。添加 async 是毫无意义的(并且可能会使您或其他人在将来维护代码感到困惑)。

The async keyword:

  • Forces the function to return a promise (which is irrelevant since setTimeout ignores the return value).
  • Allows you to use the await keyword inside the function

It doesn't stop blocking code from being blocking.

Use async is you need to manage promises inside the function. There is no other use for it in that context.

The only function you call returns a boolean, not a promise, so you don't have any promises to manage. Adding async is pointless (and might confuse you or other people maintaining the code in the future).

转身泪倾城 2025-01-27 05:22:38

您可以通过递归来完成此操作。因为您可以在下单失败后在特定的时间内重试。失败应该在 catch 块中,因为当您想在某些重试后停止操作时,它会很直观。

function makeOrderWrapper(order, retry) {
    return new Promise(function (resolve, reject) {
        try {
            if (retry < 0 )
                reject();
            makeOrder(order);
            resolve();
        } catch (exception) {
            setTimeout(function () {
                makeOrderWrapper(url, retry - 1).then(function () {
                    resolve();
                });
            }, 300000);
        }
    });
}

await makeOrderWrapper(order, 3)

You can do this with recursion. As you can retry with specific duration after your make order was not successful. The failure should be in catch block as it would be intuitive when you want to stop operation after certain retries.

function makeOrderWrapper(order, retry) {
    return new Promise(function (resolve, reject) {
        try {
            if (retry < 0 )
                reject();
            makeOrder(order);
            resolve();
        } catch (exception) {
            setTimeout(function () {
                makeOrderWrapper(url, retry - 1).then(function () {
                    resolve();
                });
            }, 300000);
        }
    });
}

await makeOrderWrapper(order, 3)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文