Obj 没有在 javascript 中推入数组

时间:2021-05-22 20:59:47

标签: javascript arrays object foreach push

这里我收到一组 csv 文本中的令牌,每个令牌都属于 monogdb 中的一个文档。我的逻辑是明智地获取文档标记并将它们作为数组返回到前​​端。

在这里我已经这样做了,但它返回一个空错误而不是对象数组。

var helps = [];
        const token_list = req.body.token_list;
        let splittedtoken = token_list.split(",");
        splittedtoken.shift();
        console.log(splittedtoken);
        splittedtoken.forEach(token => {
            Help.find({ 'token': token }, (err, result) => {
                if (result) {
                    helps.push(result[0])
                }
            });
            console.log(helps);
        })`

我无法解决它,衷心欢迎任何善意的建议。谢谢

1 个答案:

答案 0 :(得分:1)

数据库操作是异步的,但 forEach 不是。

您可以使用 Promise.all 来实现它。首先,将所有数据库操作推送到一个数组,然后使用 Promise.all 检索它的结果。

var helps = [];
const token_list = req.body.token_list;
let splittedtoken = token_list.split(",");
splittedtoken.shift();
console.log(splittedtoken);

let promises = [];

splittedtoken.forEach(token => {

  promises.push(new Promise((resolve, reject) => Help.find({
    'token': token
  }, (err, result) => {
    if (result) {
      resolve(result[0])
    }
  })));

});

Promise.all(promises).then(results => console.log(results)).catch(e => console.log(e));

请注意,Promise.all 是全有或全无。如果单个 promise 被拒绝,则整个操作将失败并执行 catch 块。

相关问题