【发布时间】:2019-04-19 01:11:55
【问题描述】:
我有多个更新承诺与续集并由 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)
});
});
有谁知道怎么回事?
编辑:我插入了整个路线以提供更多详细信息。
【问题讨论】:
-
您正在为您的
Promise.all推送一个带有then子句的承诺到一个数组中。在您到达Promise.all之前,您的承诺已经得到处理 -
我编辑了第一篇文章并插入了整个路线代码和导入。
-
@EvanBechtol 将带有
then子句的承诺数组放入Promise.all并没有错,只要您在上述then子句中返回一些内容即可 -
在 OP 的情况下它是多余的,是的,但绝不有害。 OP 只是重新返回结果
-
这不像@shkaper所说的那样工作,没有效果。
标签: javascript node.js promise sequelize.js bulkupdate