0

我在 index.js 中有一个非常小的程序,它尝试与不存在的 URL 建立连接,并在该连接中发出请求。发生这种情况时,我想捕获并处理任何错误,但我得到了一个ENOTFOUND提升,它迫使我的程序退出。我该如何去捕捉这个错误并正确处理它?

索引.js:

const jsforce =  require("jsforce");


conn = new jsforce.Connection({
  accessToken: "",
  instanceUrl: "http://thisdoesnotexistalsdkfjalsdkfjasdlkfjasdlkfjalsdkfja.com",
  version: "51.0",
  callOptions: {
    client: `sf-fx-runtime-nodejs-sdk-impl-v1:1`
  }
});

const response = conn.query("SELECT foo from bar");
console.log(response);

response.then(
undefined,
function foo(e) {
  console.log("======================== lol")
  console.log(e)
})

实际的:

$ node index.js
/Users/rschneeman/Documents/projects/work/nodejs-uncatachable-error-maybe/node_modules/node-fetch/lib/index.js:1461
      reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
             ^
FetchError: request to http://thisdoesnotexistalsdkfjalsdkfjasdlkfjasdlkfjalsdkfja.com/services/data/v51.0/query?q=SELECT%20foo%20from%20bar failed, reason: getaddrinfo ENOTFOUND thisdoesnotexistalsdkfjalsdkfjasdlkfjasdlkfjalsdkfja.com
    at ClientRequest.<anonymous> (/Users/rschneeman/Documents/projects/work/nodejs-uncatachable-error-maybe/node_modules/node-fetch/lib/index.js:1461:11)
    at ClientRequest.emit (node:events:369:20)
    at Socket.socketErrorListener (node:_http_client:462:9)
    at Socket.emit (node:events:369:20)
    at emitErrorNT (node:internal/streams/destroy:188:8)
    at emitErrorCloseNT (node:internal/streams/destroy:153:3)
    at processTicksAndRejections (node:internal/process/task_queues:81:21) {
  type: 'system',
  errno: 'ENOTFOUND',
  code: 'ENOTFOUND'
}

预期的:

$ node index.js
======================== lol
      reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
(logged but doesn't force exit the process)
4

1 回答 1

-2

您的案例似乎是一个尝试/捕获的情况。您可以执行以下操作:

try {
  //do stuff
catch (error) {
  //handle your error
}

您可能还想看看Promises

于 2021-06-15T19:26:33.050 回答