在NodeJs中,有很多技术/库可以帮助我们创建异步工作,例如Node异步库,承诺,使用NodeJs标准调用(setImmediate/setTimeout/nextTick)。
关于服务器端应用程序,有时我遇到这样的代码:
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:嵌套异步调用有什么好处吗?我要问的是,如果最多的调用是异步,那么如果我们已经异步运行,为什么还要进行嵌套调用异步?
有谁能解释一下(也许举个例子),并给出一些拇指规则?什么时候应该在异步调用中嵌套异步调用,什么时候只要一个异步就足够了。
发布于 2017-05-24 03:13:43
这不是利益问题。如果您有一个已知为异步完成的外部任务,但它调用了一个也以异步方式完成的内部任务,则外部任务和内部任务必须相互独立地处理它们的异步性。如果忽略内部任务的异步性,则外部任务可能在内部实际完成之前错误地完成。
例如:假设您有一个模块,它对多个外部服务(API、数据库等)进行查询,并执行一些操作来组合结果。显然,该模块异步完成其任务,因为它依赖于其他服务;但每个服务调用也异步完成。由于模块对这些内部调用的结果进行操作,因此如果它们也不是异步的,则无法返回正确的输出。
即使只有一个内部任务,这个模块仍然需要等待才能处理结果。只有在任何阶段都不关心输出时,忽略异步才是可行的。
https://stackoverflow.com/questions/44134419
复制相似问题