首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌套异步调用(使用异步、setImmediate、允诺等)有什么好处?

嵌套异步调用(使用异步、setImmediate、允诺等)有什么好处?
EN

Stack Overflow用户
提问于 2017-05-23 12:08:22
回答 1查看 181关注 0票数 0

在NodeJs中,有很多技术/库可以帮助我们创建异步工作,例如Node异步库,承诺,使用NodeJs标准调用(setImmediate/setTimeout/nextTick)。

关于服务器端应用程序,有时我遇到这样的代码:

代码语言:javascript
运行
复制
function doWork() {
    async.parallel([work1func, work2func],
    (err, result) => { doSomthingWithTheResult(); }
}

function work1func(cb) {
    doSomeStuff1();
    async.series([moreWork1, moreWork2…], cb);
}

function work2func(cb) {
    doSomeStuff2();
    async.series([moreWork3, moreWork4…], cb);
}

如您所见,在work1Func中,work2Func也使用async.series对其他函数进行异步内部调用(可以是async.parallel或任何其他异步机制)。

Q:嵌套异步调用有什么好处吗?我要问的是,如果最多的调用是异步,那么如果我们已经异步运行,为什么还要进行嵌套调用异步?

有谁能解释一下(也许举个例子),并给出一些拇指规则?什么时候应该在异步调用中嵌套异步调用,什么时候只要一个异步就足够了。

EN

回答 1

Stack Overflow用户

发布于 2017-05-24 03:13:43

这不是利益问题。如果您有一个已知为异步完成的外部任务,但它调用了一个也以异步方式完成的内部任务,则外部任务和内部任务必须相互独立地处理它们的异步性。如果忽略内部任务的异步性,则外部任务可能在内部实际完成之前错误地完成。

例如:假设您有一个模块,它对多个外部服务(API、数据库等)进行查询,并执行一些操作来组合结果。显然,该模块异步完成其任务,因为它依赖于其他服务;但每个服务调用也异步完成。由于模块对这些内部调用的结果进行操作,因此如果它们也不是异步的,则无法返回正确的输出。

即使只有一个内部任务,这个模块仍然需要等待才能处理结果。只有在任何阶段都不关心输出时,忽略异步才是可行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44134419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档