gpt4 book ai didi

javascript - 在发布请求中使用 mongodb 插入多个文档

转载 作者:可可西里 更新时间:2023-11-01 10:00:25 24 4
gpt4 key购买 nike

在同一请求中使用 mongodb 插入多个文档我得到未定义的值。

.post(function (req, res) {
...
Item.create(data)
.then(function (item) {

var modelOtherItem;

OtherItem.create({
...
}).then(function (otherItem){
modelOtherItem = otherItem;
modelOtherItem; // here I get the expected value
});

res.status(201);

res.json({
item: item, // has a value
otherItem: modelOtherItem // -> is undefined
});
});

最佳答案

promise 立即返回 但它们的 then 回调异步执行。这意味着您正在访问 modelOtherItem 在它被赋值之前。最简单的修复方法是在 then 回调中添加您的代码(您也可以去掉 modelOtherItem 变量):

post(function (req, res) {
// ...
Item.create(data)
.then(function (item) {

OtherItem.create({
// ...
}).then(function (otherItem){

// add code here
res.status(201);

res.json({
item: item, // has a value
otherItem: otherItem // also has value
});
});
});

需要注意的一点是,您可以通过将数组传递给 Model.collection.insert(array... 或者,如果使用 Mongoose,Model .create(数组...


替代方案

如果您的模型可以彼此独立创建(意味着任何项目的创建不依赖于任何其他项目),您可以使用 Promise.all接受一组 promise 并在该数组中的所有 promise 也解决后解决的方法:

post(function (req, res) {
// ...

// create an array that will hold item creation promises
let promises = [];

// add the promise that creates the item
promises.push(Item.create(...));

// add the promise that creates the other item
promises.push(OtherItem.create(...));

Promise.all(promises)
.then(function(results) { // this function is called once all promises in the array `promises` resolve
// results contains the resolved data from each promises in the array
// in the order of the promises

var item = results[0];
var otherItem = results[1];

// OR you can use ES6 `let` declaration with
// destructuring to achieve the same as above
// in a cleaner way:
// let [item, otherItem] = results;

res.status(201);

res.json({
item: item,
otherItem: otherItem
});

// in ES6, if both the object property name and the variable name are the same
// you can just specify the name once and achieve the same effect as above
// with less code:
/*
res.json({
item,
otherItem
});
*/
});
});

关于javascript - 在发布请求中使用 mongodb 插入多个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36362890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com