1

Mongoose を使用して mongoDB から項目を読み取る関数を作成しました。呼び出し元に結果を返したいと思います。

ecommerceSchema.methods.GetItemBySku = function (req, res) {
    var InventoryItemModel = EntityCache.InventoryItem;

    var myItem;
    InventoryItemModel.findOne({'Sku' : req.query.sku}, function (err, item) {
        // the result is in item
        myItem = item;
        //return item doesn't work here!!!!
    });

    //the value of "myItem" is undefined because nodejs's non-blocking feature
    return myItem;
};

ただし、ご覧のとおり、結果は「findOne」のコールバック関数でのみ有効です。コールバック関数で処理を行う代わりに、「item」の値を呼び出し元関数に返す必要があるだけです。これを行う方法はありますか?

どうもありがとうございました!

4

1 に答える 1

1

関数で非同期呼び出しを行っているため、項目を直接返すのではなく、 GetItemBySkuメソッドにコールバック引数を追加する必要があります。

ecommerceSchema.methods.GetItemBySku = function (req, res, callback) {
    var InventoryItemModel = EntityCache.InventoryItem;

    InventoryItemModel.findOne({'Sku' : req.query.sku}, function (err, item) {
        if (err) {
            return callback(err);
        }
        callback(null, item)
    });
};

次に、コードでGetItemBySkuを呼び出すと、コールバック関数で値が返されます。例えば:

eCommerceObject.GetItemBySku(req, res, function (err, item) {
    if (err) {
        console.log('An error occurred!');
    }
    else {
        console.log('Look, an item!')
        console.log(item)
    }
});
于 2013-01-14T14:51:28.477 に答える