不能根据数组中的值进行多次查询?

Cannot conduct multiple queries based on values within array?

简而言之,我希望我的用户能够在搜索字段中输入各种 SKU 和 UPC(以逗号分隔),我在其中生成一组搜索值并执行迭代过程 return results/logic 每个值(即 1 个 UPC 可以代表 3 个 SKU,我会 return 搜索到的 UPC 产品最便宜的 SKU)。

我正在尝试做的一个例子:

// Search Array: UPC, SKU, SKU respectively.
var searchParams = ['342421111', '77HE2', 'U7IA2'];

// Declare var to hold search results.
var searchResults = {};

// For each value in array, get me results to work with.
for(i=0; i < searchParams.length; i++ ) {

    Product.find({"UPC": searchParams[i]}).exec(function (err, results){
        if(results.length >= 1) {
            data[searchParams[i]] = results;
        } else {
            vendorProduct.find({"SKU": searchParams[i]}).exec(function (err, results){
                if(results.length >= 1) {
                    data[searchParams[i]] = results;
                } else {
                    data[searchParams[i]] = "No results.";                    
                }
            });
        }
    });

}


console.log(searchResults);
// This should return something like the below:

{
    '342421111': [results inside],
    '77HE2': [results inside],
    'U7IA2': [results inside]
}

我已经研究了 lodashasync.js 等选项,但我不确定它能解决我想要做的事情。

我希望你们中的一位魔法师能帮助我!

看看async.map()

用法类似于...

var searchParams = ['342421111', '77HE2', 'U7IA2'];

async.map(searchParams, function(param, next) {
    Product.find({ UPC: param }).exec(function(err, results) {
        if (err) return next(err);

        if (results.length) return next(null, results);

        vendorProduct.find({ SKU: param }).exec(function(err, results) {
            if (err) return next(err);

            if (results.length) return next(null, results);

            next(null, 'No results');
        });
    });
}, function(err, searchResults) {
    if (err) {
        // handle the error
        return;
    }

    console.log(searchResults);
});