gpt4 book ai didi

Javascript forEach 非阻塞查询

转载 作者:行者123 更新时间:2023-11-30 08:01:04 25 4
gpt4 key购买 nike

在我的 Controller (sails.js) 中,我有一个数组,其中包含一个 ID 列表。

那些是来自另一个表的 ID。我需要使用该 ID 提取每条记录,并将其发送给用户。

到目前为止,我已经编写了这段代码:

     suggestions.forEach(function (element, index, array){
Suggester.findOne({
"id": element.suggester_id
},function(err,docs){
suggesterResults.push(docs);
console.log("I am adding to array: " + docs);
if (index === array.length - 1) {
completeSend(suggesterResults);
}
});
})
...
function completeSend (results) {
console.log("I am in complete send method" + results)
return res.send(results, 200);
}

这行得通,但看起来像是作弊。在我看来这是阻塞代码,这是 Not Acceptable 。在这种情况下是否有通常的处理方式?

最佳答案

正确的做法是

Suggester.find({
id: suggestions.map(function(s) { return s.suggester_id; })
})
.then(completeSend);

您调用一次 find,并传递一个 ID 数组,完成后,将使用结果数组调用 completeSend


您提到所有这些都已经是 promise 链的一部分,在这种情况下有一个 .then() 是不好的做法(不要嵌套 .then() 调用!)

如果是这样的话,那么正确的做法是:

// Some promise chain logic here
.then(function(/* suggestions? */) {
return Suggester.find({
id: suggestions.map(function(s) { return s.suggester_id; })
});
})
.then(completeSend);

关于Javascript forEach 非阻塞查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28166539/

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