Javascript 如果主线程完成异步函数的执行,节点是否会结束进程?

Javascript 如果主线程完成异步函数的执行,节点是否会结束进程?,javascript,node.js,Javascript,Node.js,很抱歉,如果这个问题已经得到了回答,它似乎已经是,但我无法找到一个确切的答案。比如说,我们有一个类似的程序: import fs from 'fs'; import path from 'path'; ... listOfFiles.forEach(veryLargeFile => fs.copyFile(veryLargeFile, path.join(newLocation, veryLargeFile)); 在上面的示例中,我使用了fs.copyFile,但它可以是任何长时间运

很抱歉,如果这个问题已经得到了回答,它似乎已经是,但我无法找到一个确切的答案。比如说,我们有一个类似的程序:

import fs from 'fs';
import path from 'path';

...

listOfFiles.forEach(veryLargeFile => fs.copyFile(veryLargeFile, path.join(newLocation, veryLargeFile));

在上面的示例中,我使用了
fs.copyFile
,但它可以是任何长时间运行的异步操作。我是否保证节点进程将在终止进程之前等待所有文件的复制,或者我是否需要显式地等待它?我知道node不会等待未决承诺,但我不确定这是否属于同一类别。

正如另一位评论者所指出的,这足够简单,可以测试我自己。我使用
dd
生成了几个大的(~1GB)文件,然后使用与上面类似的脚本对其进行了测试:

let fs = require("fs");
let path = require("path");

let oldLocation = "./input/";
let newLocation = "./output/";
let inputfiles = fs.readdirSync(oldLocation);
inputfiles.forEach(veryLargeFile =>
  fs.copyFile(
    path.join(oldLocation, veryLargeFile),
    path.join(newLocation, veryLargeFile),
    err => {
      if (err) throw err;
      console.log("completed");
    }
  )
);

看起来主线程确实在终止之前等待所有异步逻辑解析,因此上述代码是安全的,不会显式阻止主线程。

异步进程(所有进程)都被委托由事件循环管理,可以在不同的线程中执行。不管是承诺还是回扣。

你试过这个吗?这其实是一个很好的问题,但感觉很容易回答。你是对的,这足够简单,可以回答我自己(我一开始没想到)。答案是,在所有异步函数返回之前,进程不会结束。以上代码是安全的。