我正在使用该when
库并有一些这样的代码:
when.join(
database.then(function(db) {
return db.collection("incidents");
}).then(function(col) {
return col.idExists(incidentId);
}),
database.then(function(db) {
return db.collection("images");
}),
elib.uploadToS3(pic.path, 'image_uploads/' + id, pic.type)
).spread(function(exists, images, url) {
if(!exists) {
throw new Error("Incident id does not exist");
}
console.log("Image sucessfully uploaded to: ", url);
return images.insert({
_id: id,
size: pic.size
});
}).then(function() {
console.log("At this point, it's totally succesfully recorded in the database!")
});
该代码具有合理的可读性,但逻辑是:
- 确保 eventId 有效
- 获取图像表
- 上传图片到 S3
所有这三个都可以同时发生。第 1 步和第 2 步都共享相同的“database.then”,所以我想使用它,但我不知道如何扁平化承诺。
如果有任何问题(包括 eventId 无效),我应该打电话elib.deleteFromS3('image_uploads/' + id);
如果这一切都成功,我准备通过在数据库中添加一个新条目来“提交”:
images.insert({ _id: id, size: pic.size })
如果这行得通,我们就完成了。如果没有,我仍然需要再次从 S3 中删除。
在满足错误处理和'database.then'重用的同时保持可读性的任何帮助将不胜感激。