Sails JS:如何从服务返回值

Emm*_*pos 6 javascript asynchronous sails.js

我在sails js中创建一个服务.我想在返回之前更新totalCount的值.但问题是当返回在async.series的回调中时,我在调用它时得到一个未定义的.我该怎么做?

var totalCount = 0;

    async.series([
        function getProducts(cb_series){
            Inventory.find({sku_id : sku_id, bay_id : bay_id})
                .then(function(inventory_items){

                    async.each(inventory_items, function(item, cb_each){
                        totalCount = totalCount + item.physical_count;
                        cb_each();
                    }, function(err){
                        if(err)
                            console.log(err);

                        cb_series();
                    });             
                });
        }
    ], function returnResult(err, cb){
        if(err)
            console.log(err);

        return totalCount;
    });
Run Code Online (Sandbox Code Playgroud)

Dan*_*ick 7

我不完全确定你要做什么.但是你可能想要在这样的回调中传递totalCount:

function getProducts(callback){
    Inventory.find({sku_id : sku_id, bay_id : bay_id}).then(
        function(inventory_items){
            callback(null, inventory_items.length)
        }, function(err){
            console.log(err);
            callback(err);
        });
}
Run Code Online (Sandbox Code Playgroud)

如果有错误,它将回调错误,因为它是第一个参数,因此对它进行空检查.如果第一个参数为null,则第二个参数将是数组的长度.

如果您宁愿返回所有产品而不仅仅是长度(如函数名称所暗示的那样),那么它非常相似:

function getProducts(callback){
    Inventory.find({sku_id : sku_id, bay_id : bay_id}).then(
        function(inventory_items){
            callback(null, inventory_items)
        }, function(err){
            console.log(err);
            callback(err);
        });
}
Run Code Online (Sandbox Code Playgroud)

你会在第一种情况下使用它:

getProducts(function(err, productCount) {
    if(err) {
        console.log(err);
        return err;
    } else {
        var totalCount = productCount;
    }
    //etc etc...
}
Run Code Online (Sandbox Code Playgroud)

......或者第二种情况:

getProducts(function(err,products) {
    if(err) {
        console.log(err);
        return err;
    } else {
        var productArray = products;
    }
    //etc etc...
}
Run Code Online (Sandbox Code Playgroud)