JS(node.js) - 如果我进行异步调用但不等待它完成将保证完成执行?

时间:2016-07-24 11:59:04

标签: javascript node.js asynchronous

标题是一个很长的问题但是如果我在javascript中进行异步调用但是没有回调或链接它在一个承诺中它会完成执行吗?即如果我的代码如下:

function markAsInactive(userId) {
    return retrieveUser(userId) // 
    .then(res => {
       const mark = markAsInactive(userId) // returns a promise (say takes 2 seconds)
       return Promise.resolve('blah')
    })
    .then(...etc)
    .catch(...)
}

markAsInactive的调用被触发但线程不等待它解决,而是立即转移到下一个then(是我的理解)。是否可以保证完成执行,或者如果堆栈返回根目录,线程/进程是否会取消调用?

我知道我可以使用return Promise.all([mark, ...])这样的东西来并行解决多个承诺;这个问题更适合我的启发。

1 个答案:

答案 0 :(得分:2)

  

是否可以保证完成执行,或者如果堆栈返回根目录,线程/进程是否会取消调用?

完成通话。 所有异步操作最终退出当前作业(任务),然后再完成对它们的处理,完全展开堆栈;它是给定线程上的job-based nature of JavaScript固有的(并且NodeJS使用单个线程),并且保证promise then回调的事实是异步的。

如果NodeJS在完成之前终止,则工作将无法完成,但NodeJS会在有任何未完成的任务,I / O操作等时继续运行。