gpt4 book ai didi

javascript - node.js 中的 async/await 理解

转载 作者:行者123 更新时间:2023-12-03 13:08:41 25 4
gpt4 key购买 nike

已经阅读了大量的文章和文档,但是这个主题对我来说仍然不够清楚。引用一个答案https://stackoverflow.com/a/46004461/630169 :

As long as the code contained inside the async/await is non-blocking it won't block, for example, db calls, network calls, filesystem calls.

But if the code contained inside async/await is blocking, then it will block the entire Node.js process, for example, infinite loops, CPU intensive tasks like image processing, etc.



但是, Understanding the node.js event loop说:

Of course, on the backend, there are threads and processes for DB access and process execution.



在 C# 中编写标记为 async 的函数就足够了并调用 await所以.Net把它放在另一个线程中。然而,它让我感到困惑的是,在 Node.js 中以不同方式组织的东西,async/await 函数仍然可能阻塞主线程。

所以问题是:如何写(组织)任意 async/await node.js 中的函数以确保它将在单独的线程或进程中异步运行?有好的代码示例吗?一些 npm模块?让它没有比 C# 变体更棘手也很好。谢谢!

一些使它成为非阻塞的函数示例,例如,如果我想要同步 DB 调用来实现异步(非阻塞):
var Database = require('better-sqlite3');

var db = new Database('./my_db.sqlite');

async function DBRequest() {
var row = db.prepare("SELECT * FROM table");
return row;
};

注: better-sqlite3 — 同步模块。

最佳答案

那么这里有一些示例代码。决定提供它是一个值得的练习。

您可以编写长时间运行的阻塞代码,使其可以为其他函数提供执行时间

var array = new Array(100);
function processNext(){
if (array.length === 0) return;
var item = array.shift(); // gets first item from array and removes it.
process(item); // 0.5 seconds of blocking time
setTimeout(processNext ,500); // wait 0.5 seconds and then process the next one
// during this waiting time, other code will run on your server.
}

processNext();

诚然,我是一个新手,由于我不知道的原因,这可能是一个非常糟糕的主意。

关于javascript - node.js 中的 async/await 理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47032981/

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