ioredis bluebird обещание было создано в обработчике, но не было возвращено из него

Может кто-нибудь объяснить мне, почему я получаю это предупреждение Предупреждение: обещание было создано в обработчике, но не возвращено из него, когда я выполняю следующий код:

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. Код выполняется нормально, и все просто работает хорошо! Мне просто не нравится тот факт, что я получаю предупреждение, которое не могу решить!


person MakanMakan    schedule 12.05.2017    source источник


Ответы (1)


Bluebird предупреждает вас об явная конструкция здесь. Вот как вы должны написать приведенный выше код:

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

Нет необходимости оборачивать обещание - как цепочка обещаний :)

person Benjamin Gruenbaum    schedule 13.05.2017
comment
Как бы глупо это ни звучало, я действительно думал, что это решит мою проблему... но это не так. :(, есть еще предложения? - person MakanMakan; 15.05.2017