sách gpt4 ai đã đi

Node - Làm thế nào để xử lý các ngoại lệ chưa được phát hiện bằng lệnh gọi lại trong Node?

In lại 作者:太空宇宙 更新时间:2023-11-04 01:14:32 31 4
mua khóa gpt4 Nike

我正在编写一个 Node.js 应用程序。我正在使用 request 和 Cheerio 加载一组 URL 并获取该网站的大量信息,现在假设我想要获取的只是标题:

var urls = {"url_1", "url_2", "url_3",...,"url_n"};   
for(var i=0; i
{
getDOMTitle(urls[i],function(error,title){
if(error)
console.log("Error while getting title for " + urls[i]);
khác
console.log("The title for " + urls[i] + " is " + title);
});
}

这就是我的 getDOMTitle 方法的样子:

function getDOMTitle(urlReq,callback)
{
var request = require('request');
var cheerio = require('cheerio');
request({url:urlReq},function(error, response, doc){
var $ = cheerio.load(doc);
if(error)
{
callback(true,null);
}
khác
{
$('title', 'head').each(function (i, elem) {
var title = $(this).text();
callback(false,title);
});
}
}
}

如果模块抛出未捕获的异常,我该如何处理这种情况?我尝试添加以下内容:

  process.on('uncaughtException', function (err) {
console.error(err);
console.log("Node NOT Exiting...");
callback(true,null);
});

当我这样做时,我收到一条错误消息,指出发送后我无法设置 header 。如果我从进程错误处理中删除回调,我不会看到该错误,但客户端会旋转很长时间,因为我假设我们永远不会调用回调。

我该如何解决这个问题?

另外,我在某处读到,您可以在应用程序级别捕获未捕获的异常,这样您就不必复制代码来在每个方法中捕获它,这可能吗?如果是这样,并且抛出异常的方法预计会回调一些信息,那么如何实现?

谢谢,

1 Câu trả lời

为了回答您提出的问题,使用未捕获的异常处理程序作为通用错误捕获机制通常被认为是糟糕的设计。使用它来处理除了不可恢复的情况之外的任何事情都是错误的经济,在不可恢复的情况下您只需要在退出之前进行一些清理。

您的示例代码中存在一些问题。在您的 循环中,所有回调都会报告它们正在处理数组中的最后一个 URL,因为它们都引用 Tôi 的相同副本,在其中任何一个执行时,该值将达到最高值。您需要使用辅助函数或立即函数调用来为每个回调提供 Tôi 的私有(private)副本。

hiện hữu getDOMTitle 中,错误回调应为 callback(error),并且循环中的代码应包含错误消息中的返回值。成功回调应使用 vô giá trị 作为其第一个参数,尽管这只是一个约定问题。

关于node.js - Node - 如何使用 Node 中的回调处理未捕获的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12009213/

31 4 0
太空宇宙
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com