所以,我想要一个函数,用orderId
重新排序我的记录我正在传递一个这样的数组:
[
{id: "5b1007aeb39c961a40540db9", orderId: 0},
{id: "5b150352184eb8471c34cf7c", orderId: 1}
]
我想要的是使用orderId
多次更新所有带有id的记录那我怎么能这样做?
我正在尝试这样的事情......但它不起作用,我想它根本没有链接承诺......
'use strict';
module.exports = function(Matchtimelineevents) {
Matchtimelineevents.reorder = function(items, cb) {
let count = 0;
if (typeof items !== 'undefined' && items.constructor === Array) {
items.forEach(item => {
Matchtimelineevents.update({'id': item.id, 'orderId': item.orderId}, function() {
count++;
console.log('UPDATING: ' + item.id, item.orderId, count);
});
});
// Matchtimelineevents.bulkUpdate(items, null, function() {
// console.log(items);
// });
}
cb(null, count);
};
Matchtimelineevents.remoteMethod('reorder', {
accepts: {
arg: 'items',
type: 'array',
},
returns: {
arg: 'count',
type: 'number',
},
http: {'verb': 'patch', 'path': '/reorder'},
description: 'Reorder the items by orderId',
});
};
最好的方法是什么?
答案 0 :(得分:0)
尝试在这样的地方使用updateAll:
const updateAllToPromise = item => new Promise((resolve, reject) => {
Matchtimelineevents.updateAll({
where: { id: item.id },
}, {
orderId: item.orderId,
}, function (err) {
if (err) resolve(false);
else resolve(true);
});
});
Matchtimelineevents.reorder = (items, cb) => {
if (!Array.isArray(items)) cb(new Error('Items not is a Array object'));
else {
Promise.all(items.map(item => updateAllToPromise(item)))
.then(items => cb(null, items.filter(item => item).length))
.catch(cb)
}
};