2016-04-26 2 views
1

Я пишу промежуточное ПО KOA, чтобы вытащить информацию о пользователя из mongo, если он не кэширован. Я получаю следующую ошибку:Вызов от обещания внутри промежуточного ПО KOA

Функция this.getUser возвращает обещание ES6, которое извлекает пользователя из mongo, если оно не кэшируется с использованием запроса или создает нового анонимного пользователя.

module.exports = function* securityMiddleware(next) { 

    this.getUser(this.request) 
     .then((user)=>{ 
      if(user.isAonymous){ 
       //throw 401 access error 
      }else{ 
       yield next; 
      } 
     }); 

}; 

Это не действует, потому что: jshint говорит генератор должен иметь выход и бросает SyntaxError: Неожиданный строгий режим зарезервирован слово.

Как вы, в генераторе промежуточного программного обеспечения KOA, используете ли вы обещания? Я использую KOA v1.2.0.

ответ

1

У вас нет yield внутренних вызовов вызова (которые не являются функциями генератора). Вместо этого вы должны просто yield само обещание!

module.exports = function* securityMiddleware(next) { 
    var user = yield this.getUser(this.request); 
    if (user.isAnonymous) { 
     // throw 401 access error 
    } else { 
     yield next; 
    } 
}; 
2

Просто добавьте немного больше ответа @ Берги.

Функции генератора, используемые в KoaJS, не являются чистыми генераторами JS. Коа обертывает генераторы, используя co под ним, который имитирует семантику async/await с использованием генераторов (https://github.com/tj/co).

A co -объемный генератор может давать только конкретные типы Yieldables (включая Promise); и обрабатывает их асинхронно в фоновом режиме и возвращает полученное значение (или ошибку) обратно в функцию генератора.

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