server.listen 回调未因错误而被调用?

Kar*_*son 1 node.js express

  await new Promise((resolve, reject) => {\n    console.log('before');\n    server.listen(port, err => {\n      console.log('after');\n      if (err) {\n        reject(err);\n      }\n      resolve();\n    });\n  });\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果:

\n\n
before\n[ \xe2\x9c\x98   error  ]  Application encountered an unexpected error, exiting\n  2017-02-01T12:38:46.071Z   /home/karlm/dev/node/project/src/index.js:21:19\n[ \xe2\x9c\x98   error  ]  { Error: listen EADDRINUSE :::3030\n    at Object.exports._errnoException (util.js:1022:11)\n    at exports._exceptionWithHostPort (util.js:1045:20)\n
Run Code Online (Sandbox Code Playgroud)\n\n

如您所见,before已打印,但没有打印after?好像崩溃了,没有调用回调?

\n

Kar*_*son 5

解决于:

  await new Promise((resolve, reject) => {
    server.listen(port, () => {
      resolve();
    }).on('error', (err) => {
      reject(err);
    });
  });
Run Code Online (Sandbox Code Playgroud)

该文档并没有真正暗示我必须使用on.