0

有人可以向我解释为什么我收到此警告警告:在处理程序中创建了一个承诺,但在我执行以下代码时没有从它返回:

cache['deviceSlave'].getBySystemId(systemId).then(function(slavesMapping) {

    // do other stuff

}).catch(function(err) {

    // throw error

});

这是其余的代码:

var Promise = require('bluebird');
var _ = require('lodash');
var Redis = require('ioredis');
var config = require('/libs/config');

var redis = new Redis({
    port: config.get('redis:port'),
    host: config.get('redis:host'),
    password: config.get('redis:key'),
    db: 0
});


var self = this;

module.exports.getBySystemId = function(systemId) {

    return new Promise(function(resolve, reject) {

        var systemIds = [systemId];

        self.getBySystemIds(systemIds).then(function(result) {

            return resolve(_.values(result)[0]);

        }).catch(function(err) {

            return reject(err);

        });

    });

};


module.exports.getBySystemIds = function(systemIds) {

    return new Promise(function(resolve, reject) {

        var pipeline = redis.pipeline();

        _.each(systemIds, function(systemId) {

            var cacheKey = 'device_slaves:' + systemId.replace(/:/g, '');

            // get through pipeline for fast retrieval
            pipeline.get(cacheKey);

        });


        pipeline.exec(function(err, results) {

            if (err) return reject(err);
            else {

                var mapping = {};

                _.each(systemIds, function(systemId, index) {

                    var key = systemId;
                    var slaves = JSON.parse(results[index][1]);

                    mapping[key] = slaves;


                });

                return resolve(mapping);

            }

        });


    });

};

我正在使用以下库:ioredis & bluebird。代码执行良好,一切正常!我只是不喜欢我收到无法解决的警告的事实!

4

1 回答 1

0

Bluebird 警告您不要在此处进行显式构造。以下是您应该如何编写上述代码:

module.exports.getBySystemId = function(systemId) {
  return self.getBySystemIds([systemId]).then(result => _.values(result)[0]);
};

无需包装承诺 - 作为承诺链 :)

于 2017-05-13T12:29:02.503 回答