有人可以帮助我使用javascript& amp;异步迭代数组承诺?以下是我想要实现的内容的简化细分 - 我有一系列产品要插入数据库。阵列中的许多产品都是重复的。因此,我的算法是:
我在异步执行此操作时遇到问题。到目前为止,这是我的代码:
var checkIfProductExists = function(product_code) {
return new Promise(function(resolve, reject) {
db.collection('products').find( {product_code: product_code } ).toArray(function(err, res) {
if(err) {
console.log('--err checking if product exists');
console.log(err);
} else {
resolve(res)
}
});
});
}
var processRecords = function () {
fetchProducts().then(function(products) { //fetch products to insert
async.each(products, function(product) {
checkIfProductExists(product).then(function(result) {
if(result) {
//product exists; move onto the next product
callback();
} else {
//product doesn't exist; insert it
insertProduct(product);
callback();
}
});
}, function(err) {
if(err) {
console.log('--async error--');
}
});
}
}
processRecords();
但是,无论我的checkIfProductExists
方法中是否找到匹配项,此逻辑都会导致我的数组中的每个产品都被插入...有人可以帮忙吗?
提前致谢!
答案 0 :(得分:0)
如上所述,如果db.find(...).toArray()
调用未能找到匹配的条目,它将返回空数组,而不是" false"值。
您应该检查checkIfProductExists
结果的长度,或者将该函数解析为布尔值而不是可能为空的数组,即
resolve(res && (res.length > 0));
答案 1 :(得分:-1)
您需要将异步的默认值更改为false。 默认值为true。