模块承诺:UnhandledPromiseRejectionWarning:TypeError:无法读取undefined的属性'collection'

问题描述 投票:0回答:3

我刚刚在stackoverflow的讨论中搜索了我的问题,但与我发布的内容类似。因此,在这种情况下,我只想更新我的集合,然后使用'Promise'模块,而不是像我通常那样使用回调/匿名函数。但是当我在cmd中执行js的应用程序时出现错误。

这是我的简单代码:

var Promise = require('promise'); // use the 'promise' module
    var MongoClient = require('mongodb').MongoClient;
    var url = 'mongodb://localhost/EmployeeDB';

    MongoClient.connect(url)
    	.then(function(err, db) {
    	    db.collection('Employee').updateOne({
    	        "EmployeeName": "Jeffrey"
    	    }, {
    	        $set: {
    	            "EmployeeName": "Jeffrey Scurgs"
    	        }
    	    });
    	}); 

当我在cmd中执行代码时出现错误:

(node:8600)UnhandledPromiseRejectionWarning:TypeError:无法在C:\ Users \ DELL \ guru99 \ 5_Promise \ app_promise.js:7:9处读取未定义的属性'collection'at process._tickCallback(internal / process / next_tick.js: 189:7)(节点:8600)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个错误源于在没有catch块的情况下抛出异步函数,或者拒绝未使用.catch()处理的promise。 (拒绝ID:1)(节点:8600)[DEP0018]弃用警告:不推荐使用未处理的拒绝承诺。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。

那么,上面的代码中是否有任何错误的代码?

谢谢你的帮助......抱歉我的英语不好

javascript node.js promise
3个回答
0
投票

如果连接到数据库时出错,则db变量只能是未定义的。

您需要检查并修复显示的任何错误。您也可以分享错误

var Promise = require('promise'); // use the 'promise' module
    var MongoClient = require('mongodb').MongoClient;
    var url = 'mongodb://localhost/EmployeeDB';

    MongoClient.connect(url)
    	.then(function(err, db) {
            if (err) {
              return throw err; // Check the error
            }
    	    db.collection('Employee').updateOne({
    	        "EmployeeName": "Jeffrey"
    	    }, {
    	        $set: {
    	            "EmployeeName": "Jeffrey Scurgs"
    	        }
    	    });
    	}); 

0
投票

你的方法是正确的,但你错过了一件事。

当你不提供回调参数时,mongo ORM会返回一个promise。这是更正后的代码:

MongoClient.connect(url)
    .then(function(db) { // <- db is first argument
        db.collection('Employee').updateOne({
            "EmployeeName": "Jeffrey"
        }, {
            $set: {
                "EmployeeName": "Jeffrey Scurgs"
            }
        });
    })
    .catch(function (err) {})

0
投票

到目前为止,这是最好的答案...由uday singh发布

MongoClient.connect(url)
.then(function(db) { // <- db is first argument
    db.collection('Employee').updateOne({
        "EmployeeName": "Jeffrey"
    }, {
        $set: {
            "EmployeeName": "Jeffrey Scurgs"
        }
    });
})
.catch(function (err) {})

之后,我想用嵌套然后探索Promise ...这里的代码......

var Promise = require('promise');
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';

MongoClient.connect(url)
.then(function(db) {
    return db.collection('Employee').insertOne({
        Employeeid: 4,
        EmployeeName: "Ronan"
    })
    .then(function() {
        return db.collection('Employee').insertOne({
            Employeeid: 5,
            EmployeeName: "Teabouf"
        })
    })
}).catch(function(err) {
    console.error(err);
});
© www.soinside.com 2019 - 2024. All rights reserved.