gpt4 book ai didi

javascript - javascript 中的一切都可以异步吗?

转载 作者:行者123 更新时间:2023-12-02 22:54:50 26 4
gpt4 key购买 nike

我正在深入研究 javascript,最近我决定了解 javascript 中的异步。所以我学习了大约十个小时,阅读了大约 20 篇关于调用堆栈、回调、Promise、异步/等待、事件循环甚至 V8 引擎的文章。

现在,我知道js是一种单线程、同步和非阻塞语言,并使用事件循环、事件表和消息队列来处理异步行为。

好的!伟大的!但最后我不明白什么东西可以是异步的?

每个作者都使用 setTimeout、查询 DB、AJAX 和 fs 模块作为示例来解释异步。但我们知道它们都是 api,而不是 javascript 核心的一部分。

那么,我们可以执行一个 for 循环来异步计算 10 亿个数字的和吗?如果是,如何?如果否,为什么?我可以说异步行为仅适用于 Web api 或 c++ api 等吗?

最佳答案

Please note, on my fairly high spec PC, this takes 4 seconds to do 1000 values! not very fast - you'd want to do say, chunks of 1,000,000 values - 100,000,000 values will take about 2 seconds ... 1,000,000,000 values is not possible, I get an out of memory error when trying to create such an array :p

您可以通过多种方式做到这一点

这里有两种不同的方法 - 两者的性能都不比另一种更好

使用 setTimeout 和回调

function asyncSum(array, cb) {
let result = 0;
const fn = n => {
result += array[n];
if (n < array.length - 1) {
setTimeout(fn, 0, n+1);
} else {
cb(result);
}
};
fn(0);
}


asyncSum([1,2,3,4], console.log);

使用 setTimeout 和 Promise

function asyncSumPromise(array) {
return new Promise(resolve => {
let result = 0;
const fn = n => {
result += array[n];
if (n < array.length - 1) {
setTimeout(fn, 0, n+1);
} else {
resolve(result);
}
}
fn(0);
});
}
asyncSumPromise([1,2,3,4]).then(console.log);

关于javascript - javascript 中的一切都可以异步吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58036730/

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