javascript - 无法使用 promise.all() 获得 promise 结果

标签 javascript node.js promise sequelize.js bulkupdate

我有多个更新 promise 与 sequelize 并通过 Promise.all 并行执行它们

我得到的结果是:[[1]]

这是代码:

const express = require('express');
const router = express.Router();
const PLZ = require('../models/index').PLZ;
const Zone = require('../models/index').Zone;
const multer = require('multer');
const path = require('path');
const XLSX = require('xlsx');

router.post('/add', function (req, res, next) {
    let zone = {
        name: req.body.name,
        color: req.body.color
    };

    const plzs = req.body.plzs;

    for (let i = 0; i < plzs.length; i++) {
        if (plzs[i].plz.toString() === plzs[i].city && plzs[i].plz.toString() === plzs[i].district) {
            plzs[i].city = null;
            plzs[i].district = null;
        }
        delete plzs[i].checked;
    }

    Zone.create(zone).then((result_zone) => {
        let update_operations = [];
        let zone_plzs = [];

        // associate with plzs and put PLZs to database
        for (let i = 0; i < plzs.length; i++) {
            plzs[i].zone_id = result_zone.dataValues.id;
            zone_plzs.push(plzs[i]);

            update_operations.push(PLZ.update({zone_id: plzs[i].zone_id}, {where: {id: plzs[i].id}}).then((result) => {
                return result
            }));
        }

        Promise.all(update_operations)/*.then((arrayOfArrays) => {
            return [].concat.apply([], arrayOfArrays);
        })*/.then((result) => {
            res.send({status: true, data: {zone: result_zone, plzs: result}})
        }).catch(function (err) {
            return next(err);
        });

    }).catch(function (err) {
        next(err)
    });
});


有谁知道出了什么问题?

编辑:我插入了整个路线以提供更多详细信息。

最佳答案

sequelize 的 更新函数返回受影响的行数(结果数组的第一个参数)。

PLZ.update({zone_id: plzs[i].zone_id}, {where: {id: plzs[i].id}}).then((result) => {
    return result
});

所以 输出 将是 [1] ,然后你把它插入 update_operations ,用于 Promise.All

Promise.All 将返回结果数组,因此 [[1]] ,这就是您将得到的。所以这没有错,你得到了正确的东西。

我认为,您想要的是返回结果,而不是受影响的行,在这种情况下,您需要添加 returning: true ,例如
PLZ.update(
    {   zone_id: plzs[i].zone_id    }, 
    {   
        where: {id: plzs[i].id} ,
        returning: true, // <--------- HERE
    }
);

NOTE : There is no need of .then((result) => { return result }); in your code . it will work without that also

关于javascript - 无法使用 promise.all() 获得 promise 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53327825/

相关文章:

javascript - 如何在 jQuery 中使用分号

node.js - 通过 cypress JS 进行分页测试

Node.js Github API 连接 ECONNREFUSED 获取用户存储库时出错

node.js - Angular Nodejs : Output is Undefined, 无法从服务器访问数据

javascript - 使用 Node js Promise 链的 For 循环

ios - PromiseKit 6.0 迁移

javascript - 禁用的 <select> 多个元素的垂直滚动在 IE 中不起作用

javascript - 在 JavaScript 中克隆变量不起作用

javascript - 我应该如何处理包含其他 javascript 对象的 javascript 对象中的 'this'?

javascript - 这是 promise 错误吗? Selenium-webdriver 测试提交登录成功后找不到元素