Javascript JS(node.JS)-如果我进行了一个异步调用,但不等待它完成,那么它能保证完成执行吗?
标题是一个很长的问题,但若我在javascript中进行异步调用,但并没有回调或将其链接到承诺中,它会完成执行吗?i、 e.如果我有如下代码:Javascript JS(node.JS)-如果我进行了一个异步调用,但不等待它完成,那么它能保证完成执行吗?,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,标题是一个很长的问题,但若我在javascript中进行异步调用,但并没有回调或将其链接到承诺中,它会完成执行吗?i、 e.如果我有如下代码: function markAsInactive(userId) { return retrieveUser(userId) // .then(res => { const mark = markAsInactive(userId) // returns a promise (say takes 2 seconds)
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
的调用被触发,但线程不会等待它解决,而是会立即转到下一个,然后(据我所知)。如果堆栈返回到根,线程/进程会取消调用吗
我知道我可以使用类似于return Promise.all([mark,…])
的方法来并行解析多个承诺;这个问题更适合我的启发
如果堆栈返回到根,线程/进程会取消调用吗
它完成了调用所有异步操作在完成进一步工作之前退出当前作业(任务),完全展开堆栈;这是给定线程(NodeJS使用单个线程)上的固有特性,并且承诺然后回调保证是异步的
如果NodeJS在完成之前就终止了,那么这项工作就不会完成,但是NodeJS会在有任何未完成的任务、I/O操作等的情况下继续运行。这样想:一旦请求成功发出(例如发送到服务器),等待响应与否并不重要,请求已发送,服务器将执行它必须执行的操作,并且只有在该操作之后,它才会尝试使用结果进行响应。如果你不“等待”它完成,你就是没有捕捉到响应。不,例如,如果你的计算机崩溃,或者流星撞击地球,它就不会完成。