node.js - 异步函数中的错误处理

标签 node.js mongodb asynchronous web-scraping error-handling

如果以下功能由于任何原因不起作用,我想向控制台抛出错误。它正在从网站上获取一些数据,并将其写入mongoDB。
例如,如果插入到mongoDB或抓取失败,我想在控制台中得到一条错误消息。我不知道如何使用nodejs归档正确的错误处理(关于promise和东西的0条线索)。

artikel.getData(async () => { for (let i = 0; i < arrayOfArticles.length; i++){
    await scrape(i).then((price) => {

        console.log('Data ' + arrayOfArticles[i] + ': ' + received);

        //Connect to DB
        MongoClient.connect(url, {useNewUrlParser: true}, function(err, db) {
            if (err) throw err;
            let dbo = db.db("testDB");
            let insertPart = {
                name: arrayOfArticles[i],
                site: dealer,
                price: price
            };


            dbo.collection("testcollection").insertOne(insertPart, function(err, res) {
            if (err) throw err;
            console.log(divide);
            console.log("Document inserted");
            console.log(divide);
            db.close();
            }); 
        });
    });
}
});

最佳答案

您不应在循环内或API中编写数据库连接代码。它应该在一些配置文件中。

您无需在等待状态下编写.then,而使用try-catch进行错误处理。

artikel.getData(() => {
    MongoClient.connect(url, {
        useNewUrlParser: true
    }, async function (err, db) {
        for (let i = 0; i < arrayOfArticles.length; i++) {
            try {
                const price = await scrape(i);
                //Connect to DB
                if (err) throw err;
                let dbo = db.db("testDB");
                let insertPart = {
                    name: arrayOfArticles[i],
                    site: dealer,
                    price: price
                };

                dbo.collection("testcollection").insertOne(insertPart, function (err, res) {
                    if (err) {
                        console.log(err);
                        throw err
                    };
                    console.log(divide);
                    console.log("Document inserted");
                    console.log(divide);
                });
            } catch (error) {
                console.log(error);
            }
        }
        db.close();
    });
});

关于node.js - 异步函数中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51837148/

相关文章:

MongoDB - 获取文档最新版本的最有效方式

azure - API网关将同步调用转换为异步调用

javascript - 如何等待一组异步回调函数?

javascript - 回调执行得太早

node.js - 设置 Jade 布局的 CSS 路径

node.js - Mongoose $push 不断添加两个条目

mongodb - 使用 Karras 从 Mongo 集合中获取文档

javascript - fs.writeFileSnyc/fs.writeFile 写入损坏的文件

node.js - 运行 "Request Log.enable failed"时出现错误 "node --inspect"

javascript - 循环更改视频分辨率