gpt4 book ai didi

javascript - 在 JavaScript/Node.js 中运行 .map 时如何跳过回调?

转载 作者:行者123 更新时间:2023-12-01 02:59:56 25 4
gpt4 key购买 nike

有点像 this question 的续集,我需要在 POST 请求中接受多个对象,然后为每个对象处理它,保存它,然后将保存的对象返回到前端(以便客户端可以看到哪些列已成功编辑)。

当我使用 .map 时,它确实保存到数据库中,我可以确认这一点。但是,我有两个问题:

  1. 它无法正确执行 res.locals.retval.addData(dtoObject);,并且我返回的有效负载内部没有数据传输对象。
  2. 我的对象验证无法在 map 的回调内部完成。我最初尝试了reduce,但这根本不起作用,只是将所有相同的值保存到每个数据库对象中。如何在映射无效 JSON 对象时排除它们?

    var jsonObjects = req.body;
    //for (var n in req.body) {
    var promises = jsonObjects.map((jsonObject) => {
    var transform = new Transform();

    // VALIDATION OF jsonObject VARIABLE IS HERE

    if (jsonObject.id == 0) {
    var databaseObject = Database.getInstance().getModel(objectName).build(jsonObject);

    transform.setNew(true);
    transform.setJsonObject(jsonObject);
    transform.setDatabaseObject(databaseObject);

    transform.baseExtract()
    .then(() => transform.extract())
    .then(() => transform.clean())
    .then(() => transform.getDatabaseObject().save())
    .then(function(data) {
    // PROCESSING DATA
    }).catch((e) => {
    // ERROR
    });
    } else {
    var queryParameters = {
    where: {id: jsonObject.id}
    };
    console.log("Query parameters: ");
    console.log(queryParameters);
    Database.getInstance().getModel(objectName).findOne(queryParameters).then((databaseObject) => {
    transform.setJsonObject(jsonObject);
    transform.setDatabaseObject(databaseObject);
    })
    .then(() => transform.baseExtract())
    .then(() => transform.extract())
    .then(() => transform.clean())
    .then(() => transform.getDatabaseObject().save())
    .then((data) => {
    // PROCESSING DATA
    }).catch((e) => {
    // ERROR
    });
    }
    });

    Promise.all(promises)
    .then((results) => {
    return next();
    }).catch((e) => {
    throw e;
    });

这是生成的有效负载:

{
"errors": [],
"warnings": [],
"data": []
}

最佳答案

  1. 正如 @KevinB 在评论中所说,您缺少箭头函数内部的返回调用,因此数据库保存正在执行,因为它们是 Promise 链的一部分,但对响应的推送因等待返回而停止,然后 Express.js 调用在 Promise 之前解析。将 return Database.getInstance()return transform.baseExtract() 添加到您的代码中以修复此问题。
  2. 使用Array.prototype.filter()删除你想要忽略的元素,因为你不需要对它们执行 Promise,然后调用 Array.prototype.map()在结果数组上。如果您不想使用箭头函数,可以将其指定为 filtermap 的参数:

    jsonObjects.filter(函数(jsonObject) {

    },这个);

    var Promise = jsonObjects.map(function(jsonObject) {

    },这个);

关于javascript - 在 JavaScript/Node.js 中运行 .map 时如何跳过回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46497131/

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