gpt4 book ai didi

node.js - Mongoose 异步请求管理

转载 作者:太空宇宙 更新时间:2023-11-03 22:25:23 25 4
gpt4 key购买 nike

我实际上正在尝试使用 javascript 中的 mongoose 将 mongodb 引用转换为这些引用的文档值 (info.value)。

尝试使用map、for/forEach,但没有任何效果,因为 Mongoose 请求是异步的。

不太习惯这种代码,在尝试了所有这些之后我感到有点失落。

也许有人想通过查看下面的代码来给我一些提示。

仅供引用,无需担心加载模板、连接到 mongo 等,因为其他一切都工作正常。

这是我最接近预期结果的结果,但是当我尝试“console.log(cond[c​​]);/console.log(info); “(cond[c​​] 和 info 为 null 且未定义)

这个函数还需要准备好递归,因为我计划将子 block 放入 block 对象的“content”属性中。

非常感谢大家抽出时间。

// Input condition
"H1Vf3KTef || false"

// Expected result
"1 || false"

// Buggy Function
var execIfBlock = function recursExec (query, callback) {
IfBlockModel.findOne(query, function(err, ifBlock) {
if (!err) {
var cond = ifBlock.condition.split(" ");
//console.log('Block : ' + ifBlock);
//console.log('Condition : ' + cond);
var calls = new Array();
for (var c = 0, len = cond.length; c < len; c++) {
if (shortId.isValid(cond[c])) {
calls.push(function() {
InfoModel.findOne({ _id: cond[c] }, function(err, info) {
console.log(cond[c]);
console.log(info);
cond[c] = info.value;
});
});
}
}
async.parallel(calls, function(err, result) {
console.log(result);
// Do some job using the final expected result : "1 || false"
});
}
});
};

// Info template
{
"_id": "H1Vf3KTef",
"value": "1"
}

// Bloc template
{
"_id": "rkRBtLTef",
"content": [],
"condition": "H1Vf3KTef || false"
}

// Info schema
var InfoSchema = new Schema({
_id: { type: String, unique: true, required: true, default: shortId.generate },
value: { type: String, default: "0" }
});

// Bloc schema
var IfBlockSchema = new Schema({
_id: { type: String, unique: true, required: true, default: shortId.generate },
condition: { type: String, required: true, default: true },
content: [{ type: String, required: true, default: '', ref: 'block' }]
});

最佳答案

使用 promise 并在小函数中破坏代码:

var execIfBlock = function recursExec(query, callback) {
IfBlockModel.findOne(query, function (err, ifBlock) {
if (!err) {
var cond = ifBlock.condition.split(" ");

updateMultipeInfo(cond)
.then(values => {
console.log(values) // [values1, values ,...]
});
}
});
};


function updateMultipeInfo(cond){
return Promise.all(cond.map(updateInfo))
}

function updateInfo(id){
if (shortId.isValid(id)) {
return InfoModel
.findOne({ _id: id })
.then(info => info.value);
} else {
return Promise.reject("invalid id");
}
}

关于node.js - Mongoose 异步请求管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47578415/

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