2014-12-17 3 views
1

Я создаю инфраструктуру узлов для своих будущих работ, которые можно легко управлять. Он уже имеет конфигурационный модуль.Bluebird не вызывает then(), даже с ранее работающим кодом

Я написал обработчик ошибок и обновил конфигурацию для использования. С тех пор я не могу использовать метод .then(), как и раньше. Интересная часть состоит в том, что не работает над версией, над которой она работала до (git checkout).

Я не знаю, что может быть решением. Вы?


То, что я пытался до сих пор:

  • переустановку все node_modules (Globals тоже)
  • git checkout к более ранней версии
  • полностью удалить и заново установить узел и НПМ
  • Переустановка все node_modules (снова)
  • пить много кофф и ее
  • купить много пива, чтобы отправить их на правильные ответы

Я использовал этот простой скрипт для проверки ConfigManager:

var Config = require('./core/server/config'); 

// Init the Config method 
Config.load().then(function(){ 
    // Write out the 'url' 
    console.log(Config.get('url')); 
} 

// Update: and I have to wait for processing or I get `undefined` 
console.log(Config.get('url')); 
// > undefined 

Если я делаю это в режиме реального времени, но не тогда () метод, он работает:

var Config = require('./core/server/config'); 
// > undefined 
Config.load(); 
// > { _bitField: 0, _fulfillmentHandler0: undefined, _rejectionHandler0: undefined, _promise0: undefined, _receiver0: undefined, _settledValue: undefined, _boundTo: undefined, _traceParent: undefined, _trace: [Error] } 
Config.get('url'); 
// > 'http://127.0.0.1' 

Примечание:ConfigManager имеет много общего с TryGhost/Ghost's module.

ответ

0

Моя ошибка. Мне стыдно.

Кажется, когда я совершил/протолкнул исправить, я случайно расстегнул некоторые изменения, о которых я только признаваемые примерно через пол дня ...

Это была проблема (это может быть полезно для начинающих):

+ return new Promise(function(resolve, reject){ 
+  resolve(self._config); 
- return new Promise(function() { 
-  return self._config; 
    }); 

Update: решение Беньямина гораздо лучше. То же, но более компактное и понятное. Благодаря!

return Promise.resolve(self._config); 
+1

'Promise.resolve (self._config)' это правильный способ сделать это. Или, альтернативно, если ваша функция всегда возвращает обещание, вы можете использовать 'Promise.method' для ее обертывания, а затем просто' return self._config' –

+0

@BenjaminGruenbaum благодарит за это. :) Я только начинаю понимать эти модули (и мне очень нужно работать с очень скоро, поэтому я еще не мог зайти слишком глубоко). – balintant

Смежные вопросы