gpt4 book ai didi

javascript - 异步函数头脑 Storm - Babel

转载 作者:行者123 更新时间:2023-12-03 04:06:59 25 4
gpt4 key购买 nike

嘿,我认为这更多的是集思广益的帮助,如果它违反了规则,很抱歉。只是不知道在哪里问这个。

背景故事我正在使用 React,并使用 Babel 来转译 ES6/7。我想做的是让一个组件(另一个类)调用一个函数来通知它需要更改的应用程序状态。我希望这个函数调用立即返回,而不是阻塞所有以下逻辑。

到目前为止的想法

1)我知道 Promises,但我觉得它会使调用变得太大而无法编写。考虑到外部发生的操作不会返回任何内容(纯粹的),也不会抛出调用类需要注意的错误(优雅地失败)。据我所知,我必须这样做才能调用这个调度函数......
OtherClass.dispatch()
.then(() => {})
.catch(控制台.错误)
但这似乎毫无理由地像样板。

2)有 async 函数装饰器(?),但我的印象是这些需要使用 await 关键字返回 promise 以进行解析。这对我来说仍然听起来像是阻塞,或者使用 promise then 模式

4)我想到了一种混合,这样调用函数只发出dispatch函数,然后被调用的函数将执行Promise。如果我做对了,该操作似乎应该跳过 promise 并返回,而 promise 将异步触发,但我不确定是否是这种情况,或者是最佳路线。

function dispatch( ) {  
new Promise((resolve, reject) => {
...
}).then(() => {})
.catch(console.error)
}

dispatch();

5) 使用队列类型数组和无限轮询循环的老式方法。调用dispatch只是将请求推送到队列末尾,循环(可能使用requestAnimationFrame())轮询数组并按顺序完成它们。我担心这可能会在脆弱的情况下耗尽 CPU/电池,比如将其移植到 React Native,它将在移动设备上运行。

我应该指出,速度是关键。 #5 有一个很好的方法,因为它保持了更改的顺序,但这感觉很奇怪。

最佳答案

您的 Promise 版本可以更简单:

function dispatch() {
Promise.resolve().then(doTheRealWork);
}

这将是异步的;永远不会拒绝,除非 doTheRealWork 拒绝/抛出(并且你已经说过它不会),所以不需要 catch ;等等。它将在计划后尽快调用 doTheRealWork 异步(在大多数浏览器上,作为当前宏任务完成后的微任务)。

当然,您可以给自己一个更简洁的实用方法:

const later = callback => Promise.resolve().then(callback);

function dispatch() {
later(doTheRealWork);
}

示例:

const later = callback => Promise.resolve().then(callback);

function dispatch() {
later(doTheRealWork);
}

function doTheRealWork() {
console.log("Doing the real work");
}

console.log("Calling dispatch");
dispatch();
console.log("Back from dispatch");

关于javascript - 异步函数头脑 Storm - Babel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44506109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com