Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript rsvp.js和mongodb,将参数传递到承诺中_Javascript_Mongodb - Fatal编程技术网

Javascript rsvp.js和mongodb,将参数传递到承诺中

Javascript rsvp.js和mongodb,将参数传递到承诺中,javascript,mongodb,Javascript,Mongodb,我有两个系列产品和类别 我编写了一个名为getProductWithCategories的函数,它返回一个承诺,目前没有任何参数,尽管理想情况下我希望product_id是一个参数 getProductWithCategories所做的是从product_id中获取具有product_id的产品。目前,唯一能让它工作的方法是在函数外部初始化product_id 该函数工作正常,但理想情况下,我希望该函数类似于: var getProductWithCategories = function(pr

我有两个系列产品和类别

我编写了一个名为getProductWithCategories的函数,它返回一个承诺,目前没有任何参数,尽管理想情况下我希望product_id是一个参数

getProductWithCategories所做的是从product_id中获取具有product_id的产品。目前,唯一能让它工作的方法是在函数外部初始化product_id

该函数工作正常,但理想情况下,我希望该函数类似于:

var getProductWithCategories = function(product_id) {
   return new RSVP.Promise(function(resolve, reject) {

      // my mongodb search

   });
}
下面是我为这个程序编写的所有代码

MongoClient = require('mongodb').MongoClient;
    RSVP = require('rsvp');

    MongoClient.connect('mongodb://localhost:27017/mydatabase', function(err, db) {

        if (!err) {
            console.log("Database is connected");
        }

        var product = db.collection('product');
        var category = db.collection('category');
        var product_category = db.collection('product_category');

        product.insert({_id: 'knife', madeof: 'silver'});
        product.insert({_id: 'spoon', madeof: 'silver'});
        product.insert({_id: 'car', type: 'hatchback'});
        product.insert({_id: 'van', type: 'transit'});
        product.insert({_id: 'lorry', type: '4ton'});
        product.insert({_id: 'beer', type: 'lager'});
        product.insert({_id: 'whisky', make: 'Southern comfort'});
        product.insert({_id: 'wine', madein: 'france'});

        category.insert({_id: 'cutlery'});
        category.insert({_id: 'transport'});
        category.insert({_id: 'alcohol'});

        product_category.insert({category_id: 'cutlery', product_id: 'knife'});
        product_category.insert({category_id: 'cutlery', product_id: 'spoon'});
        product_category.insert({category_id: 'transport', product_id: 'car'});
        product_category.insert({category_id: 'transport', product_id: 'van'});
        product_category.insert({category_id: 'alcohol', product_id: 'beer'});
        product_category.insert({category_id: 'alcohol', product_id: 'whisky'});
        product_category.insert({category_id: 'alcohol', product_id: 'wine'});

        // product_id needs to be set before calling this function
        var getProductWithCategories = function() {
            return new RSVP.Promise(function(resolve, reject) {
                product.findOne({"_id": product_id}, function(err, product) {
                    if (err) {
                        reject(err);
                    }
                    product_category.find({"product_id": product._id}).toArray(function(err, docs) {
                        if (err) {
                            reject(err);
                        }
                        var categories = [];
                        docs.forEach(function(doc) {
                            categories.push(doc.category_id);
                            product['categories'] = categories;
                            result = product
                            // console.log(result);
                            resolve(result);
                        });
                    });
                });
            });
        }

        var product_id = 'spoon'; // product_id is set to 'spoon' before calling getProductWithCategories
        getProductWithCategories().then(function() {
            console.log(result);
        }).catch(function(error) {
            console.log('something went wrong', error);
        });
    });

如果您使用“product\u id”调用getProductWithCategories,这似乎可以正常工作。检查控制台,您将看到以下输出:

> prodid is defined here: spoon
> result: spoon
var getProductWithCategories=functionprodid{ 返回新的允诺函数解析、拒绝{ log'prodid在这里定义:'+prodid; 如果prodid{ resolveprodid; }否则{ 拒绝“未定义”; } }; } var乘积_id=‘勺子’; getProductWithCategoriesproduct\u id.thenfunctionresult{ console.log'result:'+结果; }.catch函数错误{ console.log“出错”,错误;
};谢谢杰夫的回复,你完全正确。当我失败的时候,我不知道我做错了什么。