我有一个Array,在这个下面,有多个对象示例:
var array = [
{'key': 'key4', 'value': 'value4'},
{'key': 'key3', 'value': 'value3'},
{'key': 'key2', 'value': 'value2'},
{'key': 'key1', 'value': 'value1'}
];
我的自定义函数是这样的:
var updateOnCollection = function(primaryfilter, secondaryfilter){
Test.update(primaryfilter, {$push: secondaryfilter}, function(error2, result){
if (error2) {
logger.log('error', 'Error');
console.log(error2);
} else {
console.log(result);
}
});
};
我有一个自定义功能进行更新。所以只需传递密钥和值。因此,当我尝试更新查询时,查询不是以顺序方式完成的。我试图在for循环下运行更新查询
for(var i = 0; i< array.length; i++){
//My Custom Function
//Value.updater(array[i].key, array[i].value);
var primaryfilter = {'id': 1};
var secondaryfilter = {'Elementname' : {'key': array[i].name, 'value':array[i].value }};
updateOnCollection(primaryfilter, secondaryfilter);
}
但是值会像这样存储在db上
{'key': 'key3', 'value': 'value3'},
{'key': 'key4', 'value': 'value4'},
{'key': 'key2', 'value': 'value2'},
{'key': 'key1', 'value': 'value1'}
或者像这样的时间
{'key': 'key4', 'value': 'value4'},
{'key': 'key2', 'value': 'value2'},
{'key': 'key3', 'value': 'value3'},
{'key': 'key1', 'value': 'value1'}
我知道这是由于循环的某些原因而发生的。任何人都有更好的选择来应对这种情况
使用await
。 (这仅适用于Node.js 7.6+)
var updateOnCollection = async function(primaryfilter, secondaryfilter){
try {
// Test.update() should return promise
// Normally, Node.js db adapters return promise.
await Test.update(primaryfilter, {$push: secondaryfilter});
}
catch(err) {
logger.log('error', 'Error');
console.log(error2);
}
return Promise.resolve();
}
在你的loop
for(var i = 0; i< array.length; i++){
//My Custom Function
//Value.updater(array[i].key, array[i].value);
var primaryfilter = {'id': 1};
var secondaryfilter = {'Elementname' : {'key': array[i].name, 'value':array[i].value }};
await updateOnCollection(primaryfilter, secondaryfilter);
}
将async
前缀添加到function
上执行的loop
t。