我有一个基于Stripe和MERN堆栈的应用程序。我的问题是,当我命中端点以获取费用然后console.log结果时,我看到了一系列费用。哪个好因此,我决定使用forEach
遍历它们并提取amount
的值。这行得通。
但是..
router.get('/all', (req, res) => {
stripe.charges.list({
limit: 3
}).then(charges => {
charges.data.forEach(charge => {
return newData = new Charge({
amount: charge.amount,
})
});
newData
.save()
.then(charge => {
res.json(charge)
})
.catch(err => console.log(err))
})
})
当我基于模型在forEach
中使用var count = 0;
$("#add_destination").on("click", function(e) {
e.preventDefault();
count = Math.floor(Math.random() * 78955) + 147;
if ($('[name="added_dest').is(':empty')) {
alert('empty detected');
} else {
alert('not empty');
}
$("#desti_div").append("<div class='tmar'><div class='form-group col-md-6 getspace'><label><i class='gicon fas fa-circle'></i> New Destination</label><input class='form-control input-lg form-field' type='text' id='added_dest" + count + "' name='added_dest' placeholder='New Destinaton' ><a href='' class='gored'><span class='form-control-feedback'></span>Delete</a></div><br/></div>");
});
$(document).on('click', '.gored', function(e) {
e.preventDefault();
field_val = $(this).siblings('[name="added_dest"]').val();
alert(field_val);
$(this).parent().parent().remove();
});
在MongoDB中创建记录时,即使阵列中至少有3个电荷,我也只能在数据库中保存一条记录。我该如何解决?
谢谢
答案 0 :(得分:1)
您最好使用一个操作而不是多个操作。
为此:Model.insertMany
方法。 https://mongoosejs.com/docs/api.html#model_Model.insertMany
伪代码:
const dataForSaving = charges.data.map((charge) => {
return {
amount: charge.amount,
};
});
Collection.insertMany(dataForSaving, (err, docs) => {
if (err) {
throw new Error(err);
}
console.log(docs);
});
答案 1 :(得分:1)
累积将每个新的Charge对象保存在数组中并用Promise.all()
执行它们的承诺。
router.get('/all', (req, res) => {
stripe.charges.list({
limit: 3
}).then(charges => {
let promises = charges.data.map(charge => {
let newData = new Charge({ amount: charge.amount })
return newData.save()
});
return Promise.all(promises);
}).then(result => {
res.json(result);
}).catch(err => {
console.log(err);
res.error(err);
});
});
编辑-同样的想法可以应用于更详尽的承诺,例如基于另一个异步查询有条件地保存的承诺。轮廓看起来像这样……
function maybeSave(newData) {
return db.find(/*a query based on newData */).then(result => {
return (result)? Promise.resolve() : newData.save();
});
}
// and in the loop gathering promises...
let promises = charges.data.map(charge => {
let newData = new Charge({ amount: charge.amount })
return maybeSave(newData);
});
答案 2 :(得分:1)
var charges = ['a', 'b', 'c'];
charges.forEach(function(data) {
db.insertMany(data,function(err,result)){
console.log(result)
}
// SAVE DB
});
它适用于保存到数据库的数组中的每个记录