我有一些记录的对象数组,我想在循环中插入这些记录,但它不起作用。
req.notifications(对象数组):
[ { user_group: 'reporter',
notification_type: 'email,dashboard',
parent_id: 1 },
{ user_group: 'assignee',
notification_type: 'email',
parent_id: 1 },
{ user_group: 'superadmin',
notification_type: 'sms,dashboard',
parent_id: 1 } ]
模特功能:
exports.notificationAdd = async function(req, callback) {
var notifications = req.notifications;
var _err = [];
await Promise.all(notifications.map(async (notification) => {
var schemaObj = new NotificationSchema(notification);
await schemaObj.save(function(err, created){
if(err){ _err.push(err); }
});
}));
if(_err.length > 0) {
callback({ code: 400, status: 'error', message: "Unable to add notification", data: _err});
} else {
callback({ code: 200, status: 'success', message: 'Notification successfully added!'});
}
};
我收到以下错误:
\App\myProject\node_modules\mongodb\lib\utils.js:132
throw err;
^
TypeError: Cannot read property '0' of null
我看到了数据库,只插入了一条记录。当我调试代码时,我已经看到循环进入下一个计数器而不执行循环内的save函数,只是在上次执行save函数时。
谢谢。
答案 0 :(得分:0)
您需要使用for...of
来解决循环内的承诺。
像这样(未经测试):
for(let notification of notifications){
try {
var schemaObj = new NotificationSchema(notification);
await schemaObj.save();
} catch (e) {
_err.push(err)
}
}
尽量不要将回调模式与承诺模式混合