Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose承诺错误处理_Javascript_Node.js_Mongoose_Promise_Es6 Promise - Fatal编程技术网

Javascript Mongoose承诺错误处理

Javascript Mongoose承诺错误处理,javascript,node.js,mongoose,promise,es6-promise,Javascript,Node.js,Mongoose,Promise,Es6 Promise,我在nodejsrestapi中使用mongoose和本机ES6承诺进行数据库管理 我很难找到错误处理的最佳实践。我有一段代码如下所示: Cities.findOne({'id': someid}).then((city) => { if (!city) throw 'No city found'; //modify city.embedded.dynamic.field return city.save(); }).then((city) => { if (!cit

我在nodejsrestapi中使用mongoose和本机ES6承诺进行数据库管理

我很难找到错误处理的最佳实践。我有一段代码如下所示:

Cities.findOne({'id': someid}).then((city) => {
  if (!city) throw 'No city found';
  //modify city.embedded.dynamic.field
  return city.save();
}).then((city) => {
  if (!city) throw 'City not saved';
  res.send(city);
}).catch((err) => {
  console.log(err);
});
我是否需要检查
city.save()
的返回是否未定义?或者,是否会在捕获中捕获保存中的错误

文档中不清楚
save()
是否会像mongoose查询有时那样返回
undefined

任何帮助都将不胜感激

Edit:我正在使用
findOne
并手动修改计划,因为mongoose无法对模式建模,因为它是动态的和嵌入式的。

findOne()
返回一个承诺。返回结果时,无论结果是否为空,它都已解析。当发生错误时,它被拒绝。任何
find()
的空结果都将是
null
,而不是
未定义的

如果您试图保存的元素不存在,您将得到一个
[TypeError:无法读取null的属性'save]

但是,您可以简化此过程:

return Cities.findByIdAndUpdate(city._id, {$set:city}, {new: true} ).exec()
             .then( (city) => { res.send(city) } )

将选项
new
设置为
true
会使函数在更新之后而不是更新之前返回元素Mongoose承诺使用遵循公开crud函数的
回调(error,result){}
机制,例如
newElement.save(function(err,result){}
。如果出现任何错误,承诺将被拒绝,这是合乎逻辑的。

FindByiandUpdate将很好地工作,但我不能使用它:((在我的问题中添加了编辑)。我关心的部分是model#save是否可能失败,并且仍然可以解决它的承诺。