异步函数中的错误处理

时间:2018-08-14 08:37:01

标签: 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();
            }); 
        });
    });
}
});

1 个答案:

答案 0 :(得分:0)

您不应在循环内或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();
    });
});